簡體   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