繁体   English   中英

constexpr静态模板函数:g ++错误是对clang的警告

[英]constexpr static template function: g++ error is a warning on 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关键字也是模板函数的一般情况:

g ++ 6.1:

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

clang 3.8编译并发出警告:

11:警告:显式专业化不能有存储类

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

这是clang中的错误吗? 如果没有,在哪种情况下不抛出错误是有道理的?

它就像[dcl.stc] / 1一样简单(它可以追溯到C ++ 98):

不应在显式特化(14.7.3)或显式实例化(14.7.2)指令中指定thread_local以外的存储类说明符

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM