Почему GCC не разрешает std std :: std :: std, пока Clang делает?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему GCC не разрешает std std :: std :: std, пока Clang делает?

Сообщение Anonymous »

Я использую 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»