Я использую GCC 14 и Clang 21. Почему следующий код C ++ 23 отказывается GCC, но Clang компилируется без проблем? Оба, кажется, поддерживают эту функциональность C ++ 20, и я использую C ++ 23. Я думаю, что я где -то прочитал, что std :: string в некоторых реализациях использует char [16] внутренний массив, чтобы предотвратить ненужные распределения кучи в случае небольших строк. Может ли это быть связано, на основе ошибки, который дает GCC?#include
int main()
{
constexpr std::string chaine { "e" };
return 0;
}
< /code>
ain.cpp: In function 'int main()':
main.cpp:6:40: error: 'std::string{std::__cxx11::basic_string::_Alloc_hider{((char*)(& chaine.std::__cxx11::basic_string::.std::__cxx11::basic_string::::_M_local_buf))}, 1, std::__cxx11::basic_string::{char [16]{'e', 0, '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000', '\000'}}}' is not a constant expression
6 | constexpr std::string chaine { "e" };
| ^
main.cpp:6:40: error: 'std::__cxx11::basic_string(((const char*)"e"), std::allocator())' is not a constant expression because it refers to an incompletely initialized variable
< /code>
NB : MSVC also does not like this code, I got E0028 and C2131.
Подробнее здесь: https://stackoverflow.com/questions/795 ... clang-does
Почему GCC не разрешает std std :: std :: std, пока Clang делает? ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
MacOS Clang Compiler выпуск (Apple Clang версия 17.0.0 (Clang-1700.0.13.5))))
Anonymous » » в форуме C++ - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-