Visual Studio 2017 15.5打破了C ++ TypeDefs

时间:2018-09-18 05:23:13

标签: c++ visual-studio visual-studio-2017

我遇到一个问题,随后将Visual Studio 2017更新到15.5会导致以前功能良好的C ++应用程序出现编译时错误。

具体地说,它无法像以前一样正确地解析已定义的类型定义,并且使用它们的构造函数和方法参数在编译时会产生语法错误。

示例:

template <class T>
class Demo
{
public:
    typedef Demo<T> DEMO;

public:
    template <class T>
    class NestedDemo { };

public:
    typedef DEMO::NestedDemo<T> NESTED_DEMO;

private:
    NESTED_DEMO _attribute;

public:
    inline DEMO(NESTED_DEMO attribute)
        : _attribute(attribute)
    { }
};

错误消息将是:“语法错误:标识符'attribute'之前缺少')'”,并显示编译错误:C2146。

编辑: 修复了示例中的错字。

编辑: 修复了另一个错字。

编辑: 这是示例无法编译的图像:

https://imgur.com/a/KO1m6fJ

1 个答案:

答案 0 :(得分:0)

使用类型定义现在被MSVC定义为不“接近C ++标准一致性”,因此在编译时在语法上不再有效。

非常感谢,我们可以禁用此功能。

MSVC 2017 v15.5将此选项以及其他几个选项添加到了项目的属性中。虽然我不知道是否还有其他解决方法,但这是用于禁用标准符合性的选项:

  

“ C / C ++>语言>一致性模式”(默认为“是”   (/ permissive-)”更新后)

将值更改为“否”将解决问题。

对于那些感兴趣的人,这里是有关更新的博客文章:

https://blogs.msdn.microsoft.com/vcblog/2017/11/15/msvc-conformance-improvements-in-visual-studio-2017-version-15-5/

这是有关该选项的文档:

https://docs.microsoft.com/en-us/cpp/build/reference/permissive-standards-conformance?view=vs-2017

相关问题