ホームページ >バックエンド開発 >C++ >GCC が非名前空間スコープで明示的特殊化のコンパイルに失敗するのはなぜですか?

GCC が非名前空間スコープで明示的特殊化のコンパイルに失敗するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-16 05:40:03229ブラウズ

Why Does GCC Fail to Compile Explicit Specialization in Non-Namespace Scope?

非名前空間スコープでの明示的な特殊化

指定されたコードは、Clang で正常にコンパイルされたにもかかわらず、GCC でコンパイルできません。 C 標準 ([temp.expl.spec]) によれば、明示的な特殊化は、対応するプライマリ テンプレートを定義できる任意のスコープで宣言できます。

この動作は GCC のバグであるようです。 CWG 727 によると、明示的特殊化に関する [temp.expl.spec] のルールは、関連するスコープでそのような宣言を許可するように変更されました。

明示的特殊化のスコープ

元の標準では、明示的な特殊化は特殊化されたテンプレートを囲む名前空間で宣言する必要があると規定されていました。ただし、現在の標準では、プライマリ テンプレートを定義できるスコープでの明示的な特殊化が許可されています:

  • クラス定義 (12.2)
  • メンバー関数 (17.6.2)
  • インライン名前空間 (10.3.1.2)

GCC がこの更新されたルールに従わない場合、バグが発生します。この問題はバグ 85282 として特定され、現在 GCC 開発チームによって追跡されています。

以上がGCC が非名前空間スコープで明示的特殊化のコンパイルに失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。