「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > GCC が非名前空間スコープで明示的特殊化のコンパイルに失敗するのはなぜですか?

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

2024 年 12 月 21 日に公開
ブラウズ:134

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 開発チームによって追跡されています。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3