在 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中文网其他相关文章!