C のクラス テンプレート コンストラクターの冗長テンプレート パラメーター リスト 20
C では、クラス テンプレートでコンストラクターを宣言するための構文が変更されました。 C 20 では、以前は次の形式のコードが考慮されていました。整形式:
template<typename T> struct S { S<T>(); };
error: expected unqualified-id before ')' token 3 | S<T>(); ^
このエラーは、GCC10.2 または -std= を指定した Clang では発生しません。 c 20 では、C 20 で導入された根本的な変更に由来しています。
C 20 の互換性セクションによると、コンストラクターまたはデストラクターの宣言子 ID としての simple-template-id は無効になりました。この動きは、潜在的なエラーが発生しやすい冗長性を排除することを目的としています。
C 20 の [class.ctor] セクションの新しい文言では、クラス テンプレート内のメンバー宣言のコンストラクターには、代わりに挿入されたクラス名を使用する必要があると指定されています。 :
template<typename T> struct S { S(); // Use injected-class-name };
この例では、S は内部クラス テンプレートの挿入されたクラス名を表します。したがって、冗長な <> は、テンプレート パラメーターがコンストラクター宣言から削除されました。
以上がC 20 クラス テンプレート コンストラクターの冗長なテンプレート パラメーター リストがエラーになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。