在Microsoft Visual C
的初始Syntax檢查在範圍中受到限制。它未能檢查是否存在聲明名稱的存在,導致名稱缺乏正確的聲明時會導致編譯問題。 為了說明這一點,請考慮以下示例:一個符合標準的編譯器將在第一階段解決FOO(0)調用,並將其綁定到foo(void*)。但是,MSVC將此過程推遲到第二階段,將FOO(0)綁定到foo(int),並導致錯誤。
它錯誤地解析了相關表達式,例如下面代碼中的bar(t),將僅在第二階段可見的聲明中。
在兩種情況下,MSVC的行為都違反了模板實例化的第一階段和第二階段之間指定的分離。此不正確的實現在Visual Studio 2015中仍然存在。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3