C 11 SFINAE 中的直接上下文
C 11 標準將SFINAE(替換失敗不是錯誤)定義為一種有條件啟用的技術或停用基於模板參數推導的程式碼。第 14.8.2/8 節概述了替換失敗導致「硬」編譯錯誤或導致 SFINAE 的「軟」錯誤的條件。
該標準在本節中引用了「直接上下文」 ,表明只有函數類型及其模板參數類型的直接上下文中的無效類型和表達式才會導致推導失敗。然而,「直接上下文」的定義並不明確。
立即上下文的決策過程
要確定直接上下文中是否發生替換錯誤,請考慮以下:
想像一下模板參數替換所需的所有模板和隱式定義的函數都是預先產生的。在此準備過程中發生的任何錯誤都不在直接上下文中,並將導致硬編譯錯誤。
如果準備步驟成功完成,則替換期間的任何後續錯誤(例如,引用實例化模板或隱式定義的函數)函數模板簽名中)不構成錯誤,但會導致推論
範例
範例1:
在此範例中,實例化A
範例 2:
在此範例中,準備步驟成功實例化A char 。在取代過程中,A
以上是C 11 SFINAE 中「直接上下文」的定義是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!