ホームページ > バックエンド開発 > C++ > C 20 クラス テンプレート コンストラクターの冗長なテンプレート パラメーター リストがエラーになるのはなぜですか?

C 20 クラス テンプレート コンストラクターの冗長なテンプレート パラメーター リストがエラーになるのはなぜですか?

DDD
リリース: 2024-11-19 06:32:02
オリジナル
503 人が閲覧しました

Why Are Redundant Template Parameter Lists in C  20 Class Template Constructors Now an Error?

C のクラス テンプレート コンストラクターの冗長テンプレート パラメーター リスト 20

C では、クラス テンプレートでコンストラクターを宣言するための構文が変更されました。 C 20 では、以前は次の形式のコードが考慮されていました。整形式:

template<typename T>
struct S {
    S<T>();
};
ログイン後にコピー

の冗長性にもかかわらず、コンストラクター宣言内の template パラメーターにより、このコードは正常にコンパイルされました。ただし、-std=c 20 フラグが有効になっている C 20 では、GCC トランクが次のコードのエラーを報告するようになりました:

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート