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

    <tr>
        <th>Summary</th>
        <td>
            Spurious compilation error using <format> and import std
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    This issue has been plaguing me for a while, I've finally managed to reduce it somewhat - not minimal, but the only dependency now is libcxx.

This is perhaps related to the known limitation of #include/import ordering with std, but it's a bit different; it requires both `import std` and `#include <format>` to repro, but it shows up even with the #include encapsulated into a module, and regardless of the import order in the consuming translation unit.

[Compiler Explorer](https://godbolt.org/z/r8To7WY1s) link.

Reproducing for me on both latest trunk and latest release.

```
// mod_a.cppm
export module mod_a;

import std;

auto something() -> void
{
    auto const buf = "a";
    auto x = std::format("{}", buf[0]);
}
```

```
// mod_b.cppm
module;

#include <format>

export module mod_b;
```

```
// source.cpp
import std;

// note: import order not relevant
import mod_a;
import mod_b;

auto func() -> void
{
    auto const buf = "a";
    auto x = std::format("{}", buf[0]);
}

auto dies() -> void
{
    std::string_view weird;
    auto x = std::format("{}", weird);
}
```

Output:
```
In module 'std' imported from /app/source.cpp:2:
/opt/compiler-explorer/clang-trunk-20250717/bin/../include/c++/v1/__format/format_functions.h:99:30: error: call to implicitly-deleted default constructor of 'formatter<std::__1::basic_string_view<char, std::__1::char_traits<char>>, wchar_t>'
   99 |       formatter<_Tp, _CharT> __f;
      | ^
/opt/compiler-explorer/clang-trunk-20250717/bin/../include/c++/v1/__format/format_functions.h:98:62: note: while substituting into a lambda expression here
   98 |     __parse_ = [](basic_format_parse_context<_CharT>& __ctx) {
      | ^
/opt/compiler-explorer/clang-trunk-20250717/bin/../include/c++/v1/__format/format_functions.h:393:25: note: in instantiation of function template specialization 'std::__format::__compile_time_handle<wchar_t>::__enable<std::__1::basic_string_view<char>>' requested here
  393 |       __handle.template __enable<_Tp>();
      | ^
/opt/compiler-explorer/clang-trunk-20250717/bin/../include/c++/v1/__format/format_functions.h:389:99: note: while substituting into a lambda expression here
  389 |   static constexpr array<__format::__compile_time_handle<_CharT>, sizeof...(_Args)> __handles_{[] {
      | ^
source.cpp:16:26: note: in instantiation of template class 'std::__1::basic_format_string<wchar_t, std::__1::basic_string_view<char> &>' requested here
   16 |     auto x = std::format("{}", weird);
      | ^
/opt/compiler-explorer/clang-trunk-20250717/bin/../include/c++/v1/__format/formatter_string.h:141:63: note: default constructor of 'formatter<std::__1::basic_string_view<char>, wchar_t>' is implicitly deleted because base class '__disabled_formatter' has a deleted default constructor
  141 | struct formatter<basic_string_view<char, _Traits>, wchar_t> : __disabled_formatter {};
      | ^
/opt/compiler-explorer/clang-trunk-20250717/bin/../include/c++/v1/__format/formatter.h:25:3: note: '__disabled_formatter' has been explicitly marked deleted here
   25 | __disabled_formatter()                                       = delete;
 |   ^
```

Note the bizarre reference to `wchar_t`.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMWEFv47oR_jX0ZRBDpmzJPvjgOBHwLi3QBih6EihpbLGhSJWk4mR_fTEUZSv7kuxrX4HdwEBkkRzOfN83M6SFc_KsEfdsc882Dwsx-NbY_bPorNB6UZnmbf_USgfSuQGhFQ4qRA29EudB6jN0CCdjQcCllQoZP8JvjOcvCCephVJv0AktztiAN2CxGWoE6cGZDi-t8HAH2njopJadULS6Gjz4FsFo9QYN9qgb1PUbaHMB6UDJqn59XbLkwJJDdAx6tK3oHVhUwo9bkYlnbS4alOykF14aDeYEjKdS12pokPFCdr2xHoxt0FIsF-lbcL6Z_JCe8dyBgEp6aOTphBa1Z-k9hWDx34O06KAyvgWWJdEarc8SELqhl7f9gKXHk7Gd8Cx9pBkBkN6a227gWnNxMPSAL6hHdyiQmRHUtejdMMYptTcgoDPNMEJPm1o8C9sodI7ipeXzMEHq8K422g0dBe2t0E6NAA1a-ogt29wfTddLhRYeX3tlLFq2eWB823rfO5YeGC8YL86mqYzyS2PPjBffGC_s9snk__jnyjG-AyX1c7T4Nwq2GWralCTTEckjehSO8-DtoJ9DEPGFRYXC4eRSlsRPEjen0EuxrPu-Y8kBX0OcIxzjEEvvx7UzcqZXYvAmCNG3Up8Z35K_dyx9hBcjG5qT00wAgDCVIPNQDSdg6QMwzgXjfLR2nfMaxsIuB5YeIt9kmpO1_IEeAt8ntrlPAqC76FH-8H2Mn4ZcTSFH6qeQPlNbGPw9PFVc-MM9nRlsjbTpx1DGadp4ZOnhveAov4nHF6H9bfWMndmb6j05p0HXvwov0aVGovvSpesezlNNKV8kXuCC0jb_o0vj2i9V8tfB94MnO--HftMT21THqK7lkRts4GRNB4wXou8ZL2YMpwceTfHC9J7xoo6F4A6nQsCLWgl9vgsZe8cTvknyVc54UUnNeLFcUnW91tma8fvwKV5WjBdlOQVbjA8lEU0FyC1blh52O5Ye0oSUhNYaSw-1UIoqpux6JWvp1dtdgwopkAZPYlB-1IEdam_sWOnz0bpHy9LjFeiyXI0PlXCyLmc0sfRYt8IS6L-fTSOlt0J6N81LH-lDFI2D4Vs-crzbAcuPMP7N_SifelpSHlthn0hBZXm6KQPCKrZ5_Jnwb1l6yEgD14QOvR3cUDkv_eCpgsfeo0RXNQLwtbfoHPWQFi1GDLZXDMqyF9ZhOaZoOGowvh0ZiE6ME2qjPb56AmpCiPEMyrL2r5R0t0T7FaBKdymly2aOldQgtfNCe3k9dUyrwGPXU28D12MthZLfxjkxP6PkpsI9fosxlV52WLZCN1TwjzPNxXmoRRWG_gupRwnn4TSDjtLpyl-6S2caLuPWy2sIsx1J1GRne61TvwxD291UUf6cmtPtlNGOTpP1WG5oJghrxRuh8IeIm-n6CE5-Q3NaUozb8mDPLgD4eEXblST4kC-fSP9d4V5lJMfsR3K8Ulgr4dx34nsnmYjpqJyZ6j4skV-oDBh59ZnSYJVdlfYneuNP05xHG8MOmlutCZAsndPwf29SH3Qeugrd-iNM_bHCWgwOoRJuxnhZNtJR-jblzQOehxuegC96awB6tV4FoMeX7xrcV221fIoN9DvngSD6yCOIdP90fgOxodC_o_UHQIarMjkVKemEfQ6ojujeEoBvQlwf2wqnzT_2R2kzWo-QjWkV8Xp_avyL8RjugpX8JqxFsBguuDXSQYtlycRPliwXzT5tdulOLHC_yjc8325WabZo9_kGeb5qthU_8TUXdYIcecVP2WnLMUtWC7mf0OfJepNmy01W1-ucp43IVps04WydYCekWir10tE1chF-ativ1rt1sl4oUaFy4ecJzjVexh8iKP83Dwu7p0V31XB2bJ0o6by7mfHSK9z_vR-sNIODUSRjDQzHShgclf75RSncPW_3m8Vg1f6766707VAta9MxXtBW8d9db82_sCbNBAcd40WM4GXP_xMAAP__ANlmIA">