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 中国語 Web サイトの他の関連記事を参照してください。