[2明确担心Microsoft Visual C(MSVC)在正确实现两相模板实例化方面努力努力。该机制的哪些具体方面无法按预期运行?
背景:说明:
,MSVC对第二阶段的实现方式以两种方式偏离了语言规范:它扩展了第二阶段中累积的声明的非ADL查找。
它错误地解析了依赖的表达式,例如下面代码中的bar(t),以声明为声明仅在第二阶段可见。名称空间n { struct s {}; } void bar(void *){} template void foo(t *t){ bar(t); } void bar(n :: s *s){} int main(){ N :: S s; foo(& s); }
在两种情况下,MSVC的行为都违反了模板实例化的第一阶段和第二阶段之间指定的分离。此不正确的实现在Visual Studio 2015中仍然存在。免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3