C 11 模板替換中的直接上下文
C 11 標準引入了替換失敗不是錯誤(SFINAE),它允許在模板參數替換期間抑制硬編譯錯誤。然而,該標準定義了 SFINAE 適用的特定“直接上下文”,從而導致替換錯誤何時導致硬錯誤或軟錯誤存在一些不確定性。
立即上下文定義
標準將直接上下文定義為:
「只有函數類型及其直接上下文中的無效類型和表達式模板參數類型可能會導致推導失敗。」
這個定義很模糊,但非規範註解提供了提示:
「對替換類型和表達式的求值可能會導致副作用,例如......此類副作用不在“直接上下文”中,並且可能導致程序格式錯誤。確定在直接上下文中是否發生替換錯誤,請考慮以下決策過程:
第1 步驟:
辨識所有範本和決定替換結果所需的隱式定義函數。硬錯誤: func>> - A
以上是是什麼決定了 C 11 模板替換錯誤是硬錯誤還是軟錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!