Вслед за этим вопросом Having a constexpr static string gives a linker errorDifferent поведение наблюдается с переменной constexpr авто/углеродно массива
В вопросе, этот код не удалось скомпилировать:
#include <iostream>
struct Test { static constexpr char text[] = "Text"; };
int main()
{
std::cout << Test::text << std::endl; // error: undefined reference to `Test::text'
}
От комментария, этот код может составить:
#include <iostream>
struct Test { static constexpr auto text = "Text"; };
int main()
{
std::cout << Test::text << std::endl;
}
Мой вопрос почему auto
версия работает, но массив char
версии Безразлично» т?
Не могли бы вы указать заявление в стандарте, разрешающее вторую версию и запрещающее первое?
Я взглянул на Strange behavior with constexpr static member variable, но, похоже, это другой вопрос.
Это тот же самый вопрос и тот же принятый ответ действительно: http://stackoverflow.com/a/28534978/113662, то есть обе версии плохо сформированы, но компилятор не обязан их отклонять и выбирает принять один из них –
@TadeuszKopec Нет, последний не плохо сформирован. – Columbo
@TadeuszKopec Я пропустил ответ Саху, который является дополнением к принятому ответу. В ответе Саху упоминался буквальный тип. И, я неправильно понял, что текст будет выводиться char [] вместо char * – Danh