Почему статическое поле const char* должно быть constexpr, чтобы инициализировать его внутри класса?

У меня есть следующий фрагмент кода:

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?


person Patryk    schedule 24.01.2016    source источник