GCC がクラス内のメンバー関数テンプレートの明示的な特殊化のコンパイルに失敗するのはなぜですか?

DDD
リリース: 2024-11-24 12:52:43
オリジナル
342 人が閲覧しました

Why Does GCC Fail to Compile Explicit Specializations of Member Function Templates Within a Class?

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 でのコンパイルの失敗はバグである可能性があります。これを報告するには、次の手順に従います。

  1. https://gcc.gnus.org/bugzilla/index.cgi でバグ レポートを作成します。
  2. 「C」コンポーネントを割り当てます。
  3. GCC の適切なバージョン (例: "8")。
  4. エラー メッセージを含む問題の説明を入力します。
最小限の再現可能なコード スニペット (提供したコードなど) をレポートに添付します。

標準リファレンス:

C 標準セクション [temp.expl.spec] 段落 2 states:
明示的な特殊化は、対応するプライマリ テンプレートが定義される任意のスコープで宣言できます。

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

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