![](/img/trans.png)
[英]undefined reference to class static constexpr struct, g++ vs 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.