ConstexPR静态模板功能:G 错误是Clang上的警告



考虑以下片段:

#include <iostream>
template <int I>
constexpr int f() { return I * f<I-1>(); }
template<>
constexpr int f<0>() { return 1; }

int main () {
  std::cout << f<5>();
  return 0;
}

此代码与G 和Clang均很好地编译。很不错。现在,将static添加到模板功能专业化:

template<>
constexpr static int f<0>() { return 1; }

然后g 6.1反应错误:

11:错误:显式模板专业化不能有存储类

和clang 3.8也:

11:错误:明确的专业化具有无关的,不一致的存储类'static'

他们看起来同意。再次很好。现在,添加 static关键字也是模板函数一般情况:

g 6.1:

11:错误:显式模板专业化不能有存储类

clang 3.8汇编带有警告:

11:警告:明确的专业化不能有存储类

和clang结果返回正确的答案。

这是clang中的错误吗?如果没有,在这种情况下,不丢失错误是有意义的?

它与[dcl.stc]/1一样简单(回到C 98):

a 储存级特定符除了thread_local以外,不得在显式专业化(14.7.3)或显式实例化(14.7.2)指令中指定。

相关内容

  • 没有找到相关文章

最新更新