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

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

Susan Sarandon
リリース: 2024-11-22 00:08:10
オリジナル
452 人が閲覧しました

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

非名前空間スコープでの明示的な特殊化: GCC コンパイルの問題

C 標準に準拠しているにもかかわらず、プライマリ テンプレートを使用できる任意のスコープでの明示的な特殊化が明示的に許可されています。定義されている場合、提供されたコードでは GCC ではコンパイル エラーが発生しますが、Clang では発生しません。この矛盾により、これが GCC のバグであるかどうか、またそのバグ トラッカーでバグを特定する方法について疑問が生じます。

[temp.expl.spec] の段落 2 によると、「明示的な特殊化は、対応するプライマリ テンプレートを定義できる任意のスコープ。ただし、-std=c 2a を指定した GCC HEAD 8.0.1 では、名前空間以外のスコープでは明示的な特殊化が許可されていないことを示すエラー メッセージが生成されます。

標準からのこの逸脱は、GCC の潜在的なバグを示唆しています。バグ トラッカーでこの問題を見つけるには、GCC バグ データベースで「明示的な特殊化」または「スコープ」を検索します。あるいは、バグ報告システムを使用して問題を直接報告することもできます。

この場合、問題は Bug 85282 として報告されており、問題と CWG 727 修正との矛盾が認められています。この修正により、プライマリ テンプレートを定義できる任意のスコープで明示的な特殊化を許可するように標準が改訂されました。

このバグの意味するところは、GCC ユーザーが名前空間のスコープ外で明示的な特殊化を宣言しようとすると、コンパイルの問題が発生する可能性があるということです。 C 標準ではそのような宣言が許可されているにもかかわらず。この問題を軽減するために、ユーザーは非 GCC コンパイラーをターゲットにするか、名前空間内で明示的な特殊化をカプセル化することができます。名前空間は現在、GCC の標準解釈と互換性のある唯一のスコープです。

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

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