MSVC 错误,将 constexpr 数组作为模板非类型参数

MSVC error with constexpr array as template non-type parameter

本文关键字:类型参数 数组 错误 constexpr MSVC      更新时间:2023-10-16

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

这是一个编译器错误。

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

名称是静态的很重要吗?

这是使用 MSVC 2015 编译的:

char teststr[] = "teststr";
template <const char *N>
struct Test
{
    const char *name = N;
};
using TEST = Test<teststr>;