代码之家  ›  专栏  ›  技术社区  ›  tdenniston

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

  •  2
  • tdenniston  · 技术社区  · 7 年前

    我想知道我看到的是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 回复  |  直到 7 年前
        1
  •  1
  •   xskxzr    7 年前

    这是一个 compiler bug .

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

        2
  •  0
  •   Sid S    7 年前

    名称是静态的很重要吗?

    这与MSVC 2015一起编译:

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