C 11 SFINAE の「即時コンテキスト」を理解する
C 11 標準では、置換失敗によりハード コンパイルが発生する場合の条件を指定しています。エラー、または単にオーバーロード解決候補からテンプレートを破棄するソフト エラー。この決定における重要な概念の 1 つは、「即時コンテキスト」です。
「即時コンテキスト」の定義
「即時コンテキスト」という用語は、規格で簡単に言及されています。しかし、その正確な定義は明示的には提供されていません。ただし、多くの場合、次のテキストと組み合わせて使用されます。
Note: The evaluation of the substituted types and expressions can result in side effects such as instantiation of template specializations, generation of implicitly-defined functions, etc. Such side effects are not in the “immediate context” and can result in the program being ill-formed.
この注記は、テンプレートのインスタンス化や暗黙的な関数定義など、置換プロセス中に発生する副作用は、即時コンテキスト。
即時コンテキストの置換エラーの判断コンテキスト
即時コンテキストで置換エラーが発生するかどうかを判断するには、次の手順を検討します。
例
次のテンプレートとフォールバックを考えてみましょうfunction:
template<typename T> void func(typename T::type* arg); template<> void func(...);
結論
直接のコンテキストの概念を理解することで、いつコンテキストが発生するかをより適切に識別できるようになります。置換エラーはハード コンパイル エラーまたはソフト推定エラーを引き起こし、C 11 で SFINAE を効果的に使用できるようになります。
以上がC 11 SFINAE の「即時コンテキスト」とは何ですか? また、それは置換の失敗にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。