GCC エラー: 非名前空間スコープでの明示的な特殊化
質問:
なぜ次のコードは、メンバー関数テンプレートを明示的に特殊化すると、GCC でコンパイルに失敗します。 class?
template<typename T> struct Widget { template<typename U> void foo(U) { } template<> void foo(int*) { } };
答え:
C 標準 ([temp.expl.spec]、段落 2) によれば、明示的な特殊化は任意のクラスで宣言できます。対応するプライマリ テンプレートを定義できるスコープ。したがって、コードは GCC でもコンパイルする必要があります。
GCC のバグとレポート:
GCC でのコンパイルの失敗はバグである可能性があります。これを報告するには、次の手順に従います。
標準リファレンス:
C 標準セクション [temp.expl.spec] 段落 2 states:明示的な特殊化は、対応するプライマリ テンプレートが定義される任意のスコープで宣言できます。
以上がGCC がクラス内のメンバー関数テンプレートの明示的な特殊化のコンパイルに失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。