Visual Studio 2015 更新3是否破坏了构造函数属性?

7
在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在这方面存在问题?

1个回答

5
简而言之:是的。
这是一个bug,其中允许将"deprecated"应用于构造函数(其他成员函数似乎没问题)的定义,但不允许应用于声明。例如,以下内容可以干净地编译,并且与Update 2不同,表现正确(产生C4996诊断):
class Foo {
public:
    [[deprecated]] Foo(std::string) { }
    Foo() { }
};

请提交一个缺陷报告到MS Connect,并在此处发布链接以便我们投票支持。:-]

1
感谢确认并提供更多细节。错误报告在此处:https://connect.microsoft.com/VisualStudio/feedback/details/2931827 - Colorado.Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接