在C 20 中刪除類別模板建構子中的冗餘模板參數清單
在C 17 中,類別模板建構子可以具有冗餘模板參數清單。例如:
template<typename T> struct S { S<T>(); };
但是,在 C 20 中,情況不再如此。最近的一項變更要求類別範本的所有建構函式都必須使用注入的類別名,這消除了宣告符中的冗餘。
此更改記錄在C 20 草案的兼容性部分中:
[diff.cpp17.class] **Affected subclauses**: [class.ctor] and [class.dtor] **Change**: A simple-template-id is no longer valid as the declarator-id of a constructor or destructor. **Rationale**: Remove potentially error-prone option for redundancy. **Effect on original feature**: Valid C++ 2017 code may fail to compile in this International Standard.
具體來說,構造函數聲明符中的id 表達式現在必須採用以下之一形式:
因此,正確的建構子宣告C 20 簡單來說就是:
template<typename T> struct S { S(); };
以上是為什麼現在禁止 C 20 類別模板建構函式中的冗餘模板參數清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!