問題陳述:
使用者常見表達了對Microsoft Visual C (MSVC) 難以正確實現兩階段範本實例化的擔憂。該機制的哪些具體方面無法如預期運作?
背景:
據報道,兩階段模板實例化涉及 MSVC 執行的初始語法檢查。然而,關於此檢查是否驗證模板中使用的名稱是否被適當聲明存在疑問。
解釋:
事實上,MSVC 的初步語法檢查範圍有限。它無法檢查聲明的名稱是否存在,從而在名稱缺乏正確的聲明時導致編譯問題。
為了說明這一點,請考慮以下範例:
符合標準的編譯器將在第一階段解析foo(0) 呼叫並將其綁定到foo(void *)。然而,MSVC 將此過程推遲到第二階段,錯誤地將 foo(0) 綁定到 foo(int) 並導致錯誤。
此外,MSVC 對第二階段的實現在兩個方面偏離了語言規範:
在這兩種情況下,MSVC 的行為都違反了指定的分隔模板實例化的第一階段和第二階段。這種不正確的實作在 Visual Studio 2015 中仍然存在。
以上是為什麼 Microsoft Visual C 無法正確實現兩階段範本實例化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!