在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