使用constexpr数组作为模板非类型参数的MSVC错误

时间:2018-01-08 22:37:28

标签: c++ c++11 visual-c++ visual-studio-2017 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 个答案:

答案 0 :(得分:1)

这是compiler bug

此外,允许在模板参数中具有内部链接的对象的地址是C++11 feature,而不是C ++ 14。

答案 1 :(得分:0)

名称是否静态很重要?

此编译与MSVC 2015:

char teststr[] = "teststr";

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

using TEST = Test<teststr>;