[英]Is `template<typename>;` legal C++?
這是clang的特殊行為已經存在了很長時間:缺少聲明只會產生警告。 它跟這個一樣:
int;
g ++會顯示錯誤,而clang只會顯示警告。 這與標准不矛盾。
警告:聲明不聲明任何內容[-Wmissing-declarations]
-Werror=missing-declarations
設置正確。
並不是的。 該標准在[temp] p2中明確禁止這樣的聲明;
模板 聲明中的聲明 (如果有的話)應該
聲明或定義函數,類或變量,或
定義成員函數,成員類,成員枚舉或類模板或嵌套在類模板中的類的靜態數據成員,或者
定義類或類模板的成員模板,或
是一個演繹指南 ,或
是一個別名聲明 。
空聲明與這些子句中的任何一個都不匹配。 現在標准規定,需要一個實現來發出任何違反其規則的診斷消息,比如這個。 請注意,它表示診斷 ,它不指定是發出警告還是錯誤(甚至是注釋)。 編譯器可以提供擴展,使您編寫的內容有效,因為它不會改變格式良好的程序的含義。
所以不,兩者都是對的。 但是,clang的行為是由於擴展,而不是標准指定的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.