<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/69288>69288</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Compiling with clang cuda fails when using libstdc++'s <format> header
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          rnburn
      </td>
    </tr>
</table>

<pre>
    Take this program
```
// main.cc
#include <format> // remove the format include and everything will work
#include <iostream>

int main() {
        std::cout << "hello, hello\n";
        return 0;
}
```
If I compile with
```
clang++ -std=c++23 main.cc
```
Everything works fine.

But if I compile with
```
clang -x cu --cuda-gpu-arch=sm_70 --cuda-gpu-arch=sm_70 -std=c++23 -c main.cc
```
I get the error below.

I'm using a version of clang I compiled from trunk against gcc13's libstdc++.
```
clang++ --version
clang version 18.0.0
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/nixos/.nix-profile/bin
```
This is the flake I used to build clang:
https://github.com/rnburn/nix-flakes/blob/f5ac34af8b5901e0d4d02cf83330739afae4f75e/flake.nix

Error
```
In file included from main.cc:1:
/nix/store/mwz5ch896ykn5zyjdgzar0zc9f9phm69-gcc-13.1.0/lib64/gcc/x86_64-unknown-linux-gnu/13.1.0/../../../../include/c++/13.1.0/format:3528:36: error: non-virtual member function marked 'override' hides virtual member function
 3528 |       _M_on_chars(iterator __last) override
      | ^
/nix/store/mwz5ch896ykn5zyjdgzar0zc9f9phm69-gcc-13.1.0/lib64/gcc/x86_64-unknown-linux-gnu/13.1.0/../../../../include/c++/13.1.0/format:3621:55: note: in instantiation of template class 'std::__format::_Formatting_scanner<std::__format::_Sink_iter<char>, char>' requested here
 3621 |       _Formatting_scanner<_Sink_iter<_CharT>, _CharT> __scanner(__ctx, __fmt);
      | ^
/nix/store/mwz5ch896ykn5zyjdgzar0zc9f9phm69-gcc-13.1.0/lib64/gcc/x86_64-unknown-linux-gnu/13.1.0/../../../../include/c++/13.1.0/format:3652:24: note: in instantiation of function template specialization 'std::__format::__do_vformat_to<std::__format::_Sink_iter<char>, char, std::basic_format_context<std::__format::_Sink_iter<char>, char>>' requested here
 3652 |     { return __format::__do_vformat_to(std::move(__out), __fmt, __args); }
      | ^
/nix/store/mwz5ch896ykn5zyjdgzar0zc9f9phm69-gcc-13.1.0/lib64/gcc/x86_64-unknown-linux-gnu/13.1.0/../../../../include/c++/13.1.0/format:3679:10: note: in instantiation of function template specialization 'std::vformat_to<std::__format::_Sink_iter<char>>' requested here
 3679 | std::vformat_to(__buf.out(), __fmt, __args);
      | ^
/nix/store/mwz5ch896ykn5zyjdgzar0zc9f9phm69-gcc-13.1.0/lib64/gcc/x86_64-unknown-linux-gnu/13.1.0/../../../../include/c++/13.1.0/format:3478:30: note: hidden overloaded virtual function 'std::__format::_Scanner<char>::_M_on_chars' declared here
 3478 | constexpr virtual void _M_on_chars(iterator) { }
      | ^
/nix/store/mwz5ch896ykn5zyjdgzar0zc9f9phm69-gcc-13.1.0/lib64/gcc/x86_64-unknown-linux-gnu/13.1.0/../../../../include/c++/13.1.0/format:3535:34: error: non-virtual member function marked 'override' hides virtual member function
 3535 |       _M_format_arg(size_t __id) override
      | ^
/nix/store/mwz5ch896ykn5zyjdgzar0zc9f9phm69-gcc-13.1.0/lib64/gcc/x86_64-unknown-linux-gnu/13.1.0/../../../../include/c++/13.1.0/format:3509:30: note: hidden overloaded virtual function 'std::__format::_Scanner<char>::_M_format_arg' declared here
 3509 | constexpr virtual void _M_format_arg(size_t __id) = 0;
      | ^
/nix/store/mwz5ch896ykn5zyjdgzar0zc9f9phm69-gcc-13.1.0/lib64/gcc/x86_64-unknown-linux-gnu/13.1.0/../../../../include/c++/13.1.0/format:3528:36: error: non-virtual member function marked 'override' hides virtual member function
 3528 |       _M_on_chars(iterator __last) override
      | ^
/nix/store/mwz5ch896ykn5zyjdgzar0zc9f9phm69-gcc-13.1.0/lib64/gcc/x86_64-unknown-linux-gnu/13.1.0/../../../../include/c++/13.1.0/format:3621:55: note: in instantiation of template class 'std::__format::_Formatting_scanner<std::__format::_Sink_iter<wchar_t>, wchar_t>' requested here
 3621 | _Formatting_scanner<_Sink_iter<_CharT>, _CharT> __scanner(__ctx, __fmt);
 | ^
/nix/store/mwz5ch896ykn5zyjdgzar0zc9f9phm69-gcc-13.1.0/lib64/gcc/x86_64-unknown-linux-gnu/13.1.0/../../../../include/c++/13.1.0/format:3658:24: note: in instantiation of function template specialization 'std::__format::__do_vformat_to<std::__format::_Sink_iter<wchar_t>, wchar_t, std::basic_format_context<std::__format::_Sink_iter<wchar_t>, wchar_t>>' requested here
 3658 |     { return __format::__do_vformat_to(std::move(__out), __fmt, __args); }
      | ^
/nix/store/mwz5ch896ykn5zyjdgzar0zc9f9phm69-gcc-13.1.0/lib64/gcc/x86_64-unknown-linux-gnu/13.1.0/../../../../include/c++/13.1.0/format:3688:10: note: in instantiation of function template specialization 'std::vformat_to<std::__format::_Sink_iter<wchar_t>>' requested here
 3688 |     std::vformat_to(__buf.out(), __fmt, __args);
      | ^
/nix/store/mwz5ch896ykn5zyjdgzar0zc9f9phm69-gcc-13.1.0/lib64/gcc/x86_64-unknown-linux-gnu/13.1.0/../../../../include/c++/13.1.0/format:3478:30: note: hidden overloaded virtual function 'std::__format::_Scanner<wchar_t>::_M_on_chars' declared here
 3478 | constexpr virtual void _M_on_chars(iterator) { }
      | ^
/nix/store/mwz5ch896ykn5zyjdgzar0zc9f9phm69-gcc-13.1.0/lib64/gcc/x86_64-unknown-linux-gnu/13.1.0/../../../../include/c++/13.1.0/format:3535:34: error: non-virtual member function marked 'override' hides virtual member function
 3535 |       _M_format_arg(size_t __id) override
      | ^
/nix/store/mwz5ch896ykn5zyjdgzar0zc9f9phm69-gcc-13.1.0/lib64/gcc/x86_64-unknown-linux-gnu/13.1.0/../../../../include/c++/13.1.0/format:3509:30: note: hidden overloaded virtual function 'std::__format::_Scanner<wchar_t>::_M_format_arg' declared here
 3509 | constexpr virtual void _M_format_arg(size_t __id) = 0;
      | ^
4 errors generated when compiling for sm_70.
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWU9vo7oX_TTOxgIRGwIssmiTRurit5rukbENeGLs_GyTpP30TwZC0740nTeamTed16pKsPGfe-851z7RJdaKWnG-BMktSNYz0rlGm6VRZWfUrNTscflAthy6Rli4M7o2pAXRGkQ3YBGN_0MTbQDawJYIFVJ66sNCUdkxDgFeVdq0xAF8B8exhrd675fmcHgHT6OJYpDvuXl0jVA1PAgp4UGb7aVlhbbOcNICfDe-7j-Fcr0xAGUA5RCkt0M_HP-sYwDfAHxDdef8OgCvIECo4VJqgFZweEhWCiAE8KvZhrvOKBhNL0C6vhiW-wreQ6rbnZAcHoRrLo6ikqgaoFuAbmHQW7amQxPhVyF9OfHuLEjabC2shOLheRxuOwfFtxsBgyOkHQwC2jES1LsuIIY2AK9tW6TR2_2vjQ7oVbvvYc1djzw3RhtYcqkPL-y-ByhtYWe9awTuubFCK6grOJg5-cNgZXQLnenUFpKaCGUdrCmdY4BSC6UorWOjXeH7wQ_Gnc5Dctp8noVROE56IKbmDuAbeMwWxSIOOrVV-qACKVR3DGrVjeMawwmDrWZc-tE7bcVx9FBZR6TkbC2MfwXQptEtB2ijxFFbgDahEsdgZ3QlpO8uhbrowIPPTWGHRJI-W-9hZzmDTsOyE5INMfN078c3zu2sb_VpWAvXdGVIdQvQZsj7wYSgX8vbUUpdArSpEkJxTKqsTPJoziMWswjRKsMYRynOSUV4XKWJN7Wf6s0_h_TOQ32ZDgp6H0_5P2J6IhC-mU-2D6YBtLFOG79Te3hKaJPli8etSp4ev7L6iZjoieZVvmvaRR7UlAZzHM7DCKCNFOUi9k5TCtDmTejQZpoRhn__GM0EaDMS63zC6Zi7wQnK_NfCg9vT3D8orYK9MK4jEra8LbmBVaeo8wRridlyBgFK9Z4bI_wWKWwE4xa-MWc8lvxeEKSr8Xgq_ldoVdCGGAtQJhw3xGkDi0IS6_xxOK1_dqr56SC5-3hxXiDPjyQZwuu4_xYK-pOAKCeIG08Ox9udJI77dLDWh3m6BIpiWs63Nn3DCVUXlhKluAF49dbgL0JtCx9jgFc-5P4iQis4PabQ8P933DrOYMPNKebe7HPILu75YvFi1RDzMC4_NWAxjUdZUVB37F8XVeuRfnVzfVyMEwTwDYrfw3jKpQlsu-NUECmehjFXUC-YLvZDT-H0dyKOVs_SoiRW0HFqQbVy_Oi-n0hXuZSgiUsgvT3pk-sOomyyxAuxnj6661nzzCD_QExtBy7BSed8dD6lub9Xoh_Kp-8mz1Vo07wP86VdPGJlV4U9atk14P4I0OK0v1BfgNYIxrjqLzSpidcOp5tygu5Kyn-ZTtoJir7__P5MIeNUEvMKlzgdblyqlXX8uDPTxnst2BtX8PhT5I9JowQnPTC_ROLg5KXEGfOAmNofZeKJFw4WhWB_nMBJovyX8f48qG8wP4nyd5h_DRmA12e_mz86Mp8S_78m8Q8-5oUbxdl56z2h_9Ml_seFN8l-T3V_GewfpPHfZNJ1pZ99Kv1_xK0s-w2U_reimz2j-yn4f6rgP0fkU_N_av7fLco_UfNfoP6_L_vjgUwW1lz5xOEMHhquxjqPUDWstIF9uel1HWfGlpjlOCczvpwv8jRBUb6IZ80yTtJ5nNIU88U8JVWMszxOScJpzlPGUjoTSxQhPI_maZTgRRSHVVKyKKJlnJYpTuI5iCPeEiFDKfdtqE09E9Z2fLnIUZbNJCm5tH3tFKGxjoRAsp6ZpR8flF1tQRxJYZ19XsEJJ_lyNfl1EK4Zy1q0YwRWREg7OD_Uv14Usfqy1otyasMJ42bWGbm8Utrx249fwc7or5w6z0bvjQVo0zv0VwAAAP__f9kTfA">