首頁 > 後端開發 > C++ > 為什麼 Microsoft Visual C 無法正確實現兩階段範本實例化?

為什麼 Microsoft Visual C 無法正確實現兩階段範本實例化?

Linda Hamilton
發布: 2024-12-07 21:56:12
原創
228 人瀏覽過

Why Does Microsoft Visual C   Fail to Correctly Implement Two-Phase Template Instantiation?

Microsoft Visual C 中「損壞」的兩階段範本實例化之謎

問題陳述:

使用者常見表達了對Microsoft Visual C (MSVC) 難以正確實現兩階段範本實例化的擔憂。該機制的哪些具體方面無法如預期運作?

背景:

據報道,兩階段模板實例化涉及 MSVC 執行的初始語法檢查。然而,關於此檢查是否驗證模板中使用的名稱是否被適當聲明存在疑問。

解釋:

事實上,MSVC 的初步語法檢查範圍有限。它無法檢查聲明的名稱是否存在,從而在名稱缺乏正確的聲明時導致編譯問題。

為了說明這一點,請考慮以下範例:

符合標準的編譯器將在第一階段解析foo(0) 呼叫並將其綁定到foo(void *)。然而,MSVC 將此過程推遲到第二階段,錯誤地將 foo(0) 綁定到 foo(int) 並導致錯誤。

此外,MSVC 對第二階段的實現在兩個方面偏離了語言規範:

  1. 它使用第二階段積累的聲明擴展了非 ADL 查找。
  2. 它錯誤地將依賴表達式(例如下面程式碼中的 bar(t))解析為僅在第二階段可見的宣告。

在這兩種情況下,MSVC 的行為都違反了指定的分隔模板實例化的第一階段和第二階段。這種不正確的實作在 Visual Studio 2015 中仍然存在。

以上是為什麼 Microsoft Visual C 無法正確實現兩階段範本實例化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板