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

    <tr>
        <th>Summary</th>
        <td>
            constexpr string literal: undefined function '_M_construct<const char *>' with libstdc++
        </td>
    </tr>

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

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

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

<pre>
    The C++20 code below fails to compile under Ubuntu 24.04 with Clang trunk using `clang++ -c -std=c++20 lit.cpp`. In brief, using a string literal such as `"mystring"s` in a constexpr context fails when using libstdc++.

```cpp
#include <string>

constexpr bool string_literal()
{
  using namespace std::literals;
  //std::literals::string_literals::operator""s("pear", 4); // no difference
  "pear"s; // short version of above ((both) constexpr since C++20)
  return true;
}

static_assert(string_literal());
```

The error message is below:

```
lit.cpp:11:15: error: static assertion expression is not an integral constant expression
   11 | static_assert(string_literal());
      | ^~~~~~~~~~~~~~~~
/XXXX/YYYY/include/c++/15.0.0/bits/basic_string.h:635:2: note: undefined function '_M_construct<const char *>' cannot be used in a constant expression
  635 |         _M_construct(__s, __s + __n, std::forward_iterator_tag());
      | ^
/XXXX/YYYY/include/c++/15.0.0/bits/basic_string.h:4706:14: note: in call to 'basic_string(&"pear"[0], 4, std::allocator<char>())'
 4706 |     { return basic_string<char>{__str, __len}; }
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lit.cpp:7:3: note: in call to 'operator""s(&"pear"[0], 4)'
    7 |   "pear"s; // short version of above ((both) constexpr since C++20)
      |   ^~~~~~~
lit.cpp:11:15: note: in call to 'string_literal()'
   11 | static_assert(string_literal());
      | ^~~~~~~~~~~~~~~~
/XXXX/YYYY/include/c++/15.0.0/bits/basic_string.h:332:9: note: declared here
  332 |         _M_construct(_FwdIterator __beg, _FwdIterator __end,
      |         ^
1 error generated.
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUVkFv4zYT_TX0ZRBDIiXLPuhgO2tgD9_tK5CcBIoaWezSpEFS8e6lv70gRTty6k1RtD1UCCyKImfmPb03IXdOHjViTcodKZ8XfPSDsfX5G0q7aE33o_7_gLAndEfojmYgTIfQojIX6LlUDrwBYU5nqRBG3aGFX9pR-xFoscwKuEg_wF5xfQRvR_0NRif1EcgqE2FyCgtPAp6c7wh7FrdESvqlOJ_JKlvCVw2tldgTuk8BODhvw0BJj5YrcKMYgLsQmVB6-jG9JpQ6sspAauAgjHYev59tGHn87hOCy4A6hVWydb5LRSxJ9kyybfpdZdNfqGmaoUxqocYOgbB9yse-zDe9Z2yNUankJpVM6JrQTVpe7aYBpEI0P6E7c4EQedkStk3bHGG3tYQeCD08WBGe7rOlSXNGy72xhNLITaiBnpFPE3soQklslyKDNtDJvkeLWuB71usON1vqBmM9vKF10mgwPfDWvCHEDOvW-IHQzewTOKnFTFc3JgAs-tHqIBe8QSXV85xX57mXouHOofWErh8SG4F8-HjzIEHXaK2xcELn-BFBuknZgapHn356vAqTbfM8_JSEbadAYTCVBlNpgYmAFl0kRTrQxgPXILXHY5BtJIRrP1t25QHyHEi1h78KFuIVdpLyy2_311W5h5eXlxdCD6-vr6-EHpKOCT0k6RN6yMtltswIPbTSu3DjTopmSr4cCNuuWEBOA2htPIZ7aAC91NhBP2oR4RNaNf9rIkw7Ck_YPo5BDNwCodvgGFqB4DpQ0yKMDruZXx9zs2JlRHi97lLQddO4IOamcRDaS9Po8HjzSW_shduuiQx6YxvPj3_C4z9JXFFlqyCcYk6d1CC4UqGdElrN98TKVjOblruMlM_JrTNYXCkjornZPtAbqb2iolVCFbLfuCPV7uq3u5TvAapdEyYnOhXq4MRg-qshP1Pbx-ujfyrCtuznJDzqVT_lYYYQAKqE8F9uVVfo8A7-kx7xGOVjO1f_lS7AWOgAmzm-DoXiFjsY0N7-aTBGP3Xs4dJ9TXaEpmnxGBV3P4u6I3T_R_LT-OrSPLX1I-qwFbvlhz6-6GrWbdiGL7DOK7qhZUHZZjHUfd4xwbDP2k2f8V60mzWuRLleFzlftYItZE0zWuRZvs4pZWW1xILlXYcly1d912JPigxPXKqlUm-npbHHhXRuxDrP6XpTLBRvUbl41qJU4wXi2yjm54Wtw6andjw6UmRKOu_ew3jpFdYzUd4df_5e842HtLujz2K0qh68P8djQ3TNUfphbJfCnAg9hLLS7elsza8YPuIhggkqSWjfavp7AAAA__85fR3s">