首頁 >後端開發 >C++ >C 11 SFINAE 中「直接上下文」的定義是什麼?

C 11 SFINAE 中「直接上下文」的定義是什麼?

DDD
DDD原創
2024-12-12 20:17:11177瀏覽

What Defines

C 11 SFINAE 中的直接上下文

C 11 標準將SFINAE(替換失敗不是錯誤)定義為一種有條件啟用的技術或停用基於模板參數推導的程式碼。第 14.8.2/8 節概述了替換失敗導致「硬」編譯錯誤或導致 SFINAE 的「軟」錯誤的條件。

該標準在本節中引用了「直接上下文」 ,表明只有函數類型及其模板參數類型的直接上下文中的無效類型和表達式才會導致推導失敗。然而,「直接上下文」的定義並不明確。

立即上下文的決策過程

要確定直接上下文中是否發生替換錯誤,請考慮以下:

想像一下模板參數替換所需的所有模板和隱式定義的函數都是預先產生的。在此準備過程中發生的任何錯誤都不在直接上下文中,並將導致硬編譯錯誤。

如果準備步驟成功完成,則替換期間的任何後續錯誤(例如,引用實例化模板或隱式定義的函數)函數模板簽名中)不構成錯誤,但會導致推論

範例

  • 範例1:

    在此範例中,實例化A準備期間失敗,因為不允許指向引用的指標。由於此錯誤發生在替換之前,因此會導致硬編譯錯誤。

  • 範例 2:

    在此範例中,準備步驟成功實例化A char 。在取代過程中,A::type不存在,但此錯誤發生在準備階段之後,只會導致參數推導失敗並使用fallback函數。

以上是C 11 SFINAE 中「直接上下文」的定義是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn