Ошибка MSVC с массивом constexpr в качестве нетипового параметра шаблона

Я пытаюсь понять, является ли то, что я вижу, ошибкой компилятора MSVC или недоразумением с моей стороны. Я пытаюсь использовать простой строковый литерал шаблона времени компиляции, например, так:

constexpr const char teststr[] = "teststr";

template <const char *N>
struct Test {
  static constexpr const char *name = N;
};

using TEST = Test<teststr>;

Тем не менее, MSVC сообщает, что teststr параметр не является выражением времени компиляции: error C2975: 'Test': invalid template argument for 'N', expected compile-time constant expression (на using TEST линия).

Это моя ошибка или ошибка компилятора? Я использую Visual Studio 2017 версии 15.1.

2 ответа

Решение

Это ошибка компилятора.

Кроме того, это функция C++11, разрешающая адреса объектов с внутренней связью в аргументах шаблона, а не C++14.

Важно ли, чтобы имя было статичным?

Это компилируется с MSVC 2015:

char teststr[] = "teststr";

template <const char *N>
struct Test
{
    const char *name = N;
};

using TEST = Test<teststr>;
Другие вопросы по тегам