C 11 テンプレート置換における即時コンテキスト
C 11 標準では、置換失敗はエラーではない (SFINAE) が導入されています。テンプレート引数置換中のハード コンパイル エラーの抑制。ただし、標準では SFINAE が適用される特定の「即時コンテキスト」が定義されているため、置換エラーがいつハード エラーまたはソフト エラーにつながるかについてはいくらか不確実性が残ります。
即時コンテキスト定義
標準では、直接コンテキストを次のように定義しています。
「コンテキストの直接コンテキストでは無効な型と式のみ」関数の型とそのテンプレート パラメーターの型は推論に失敗する可能性があります。"
この定義は曖昧ですが、非規範的な注記がヒントを提供します:
"置換された型とそのテンプレートのパラメーターの型の評価式は次のような副作用を引き起こす可能性があります... このような副作用は「直接のコンテキスト」にはないため、プログラムが不正な形式です。"
決定手順
即時コンテキストで置換エラーが発生するかどうかを判断するには、次の決定手順を検討してください。
例
結論
即時コンテキストの概念を理解し、上記の決定手順により、プログラマは置換エラーがハード エラーまたはソフト エラーを引き起こす時期をより適切に予測できるようになり、C 11 で SFINAE をより効果的に使用できるようになります。テンプレート。
以上がC 11 テンプレート置換エラーがハード エラーかソフト エラーかを決定するものは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。