![](/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.