Visual Studio 2015 Update 3 是否中断了构造函数属性

Did Visual Studio 2015 Update 3 Break Constructor Attributes?

本文关键字:中断 构造函数 属性 是否 Studio 2015 Update Visual      更新时间:2023-10-16

>在VS2015u2中,以下代码编译良好。

class Foo {
public:
   [[deprecated]] Foo(std::string);
   Foo();
};

在VS2015u3下,我收到错误:

C2416: attribute 'deprecated' cannot be applied in this context

这适用于GCC 5.2,适用于VS2015的早期版本。 当然,已弃用的属性实际上并没有在VS2015中触发警告,但这并不是一个重大问题。

我是否误解了如何将属性应用于构造函数? 还是VS2015u3在这方面坏了?

简而言之:是的。

这是一个错误,其中deprecated允许应用于构造函数的定义,但不能应用于构造函数的声明(其他成员函数似乎很好)。 例如,以下编译干净,与更新 2 不同,行为正确(产生 C4996 诊断):

class Foo {
public:
    [[deprecated]] Foo(std::string) { }
    Foo() { }
};

请向MS Connect提交错误报告,并在此处发布链接,以便我们可以对其进行投票。