У меня есть следующий фрагмент кода:
struct st
{
static constexpr const int x = 2;
static constexpr int x2 = 2;
static const int x3 = 2;
static const char* str = "BLAH"; // ERROR
};
отмеченная строка дает мне следующую ошибку:
ошибка: «constexpr» необходим для внутриклассовой инициализации члена статических данных «const char* st::str» нецелочисленного типа [-fpermissive]
Когда я добавляю к нему constexpr
, все идет отлично.
struct st
{
// ...
static constexpr const char* str = "BLAH"; // OK
};
Почему это так? Поскольку инициализация непростых типов (например, std::string
или определенных пользователем типов) не разрешена в теле класса, почему const char*
есть, но только с constexpr
?