我试图了解我所看到的是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。
答案 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>;