考慮以下兩個引號:類模板的靜態成員是隱式實例化的還是不是?
[C++11: 14.7.1/1]:
[..]類模板專業化的隱式實例引起的聲明中的隱式實例,但沒有定義或默認參數,因此類成員函數,成員類,成員範圍成員枚舉,靜態數據成員和成員模板; [..]
[C++11: 14.7.1/8]:
類模板不會導致那個類的任何靜態數據成員被隱式實例化的隱式實例。
(也分別發現逐字—除了一個新的參考異常規格—在[C++14: 14.7.1/1]
和[C++14: 14.7.1/9]
)
缺少什麼我在這裏?隱式實例化類模板並隱式實例化類模板專業化之間有什麼區別?這兩個引號如何不衝突?
[C++11: 14.7.1/5]:
類模板專業化如果類型是在需要完全定義的對象類型,或者如果類類型的完整性可能影響程序的語義的上下文中被隱式實例化。 [..]
除非我誤讀,否則他們聽起來不像是衝突。第一個引用的內容如下:「...引起聲明的隱式實例化,而不是** ...靜態數據成員」。第二個報價也是這樣說的。 – CoryKramer 2014-10-31 11:05:44
@Cyber:我認爲你在誤讀。那將是一個非常奇怪的句子結構,它並沒有任何意義:「_what_的聲明」?相反,我認爲第一個引號說明<所有這些東西>的聲明(但不是定義)都被隱含地實例化了。第二個引號表示<其中的一個>不會被隱式實例化。最簡單的解決方案是Angew說的:第二個報價缺少限定詞「定義」。但僅此而已,它缺少了,所以現在引號衝突。 – 2014-10-31 11:07:14
噢好吧,我認爲「但不是」適用於聲明的其餘部分,但在重新閱讀後,情況並非如此。 – CoryKramer 2014-10-31 11:09:31