Ошибка 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>;