在VC15

时间:2015-08-07 12:40:12

标签: c++ c++11 attributes standards

根据本文http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf类和方法属性应声明如下

 struct B {
     virtual void f [[ final ]] () {};
 };

这个例子来自第11.3段。但编译此代码会给我一个警告

 warning C5030: attribute 'final' is not recognized

但如果我写

struct B {
     virtual void f () final {};
};

汇编在没有任何警告的情况下进行,一切正常。

我使用带有工具集v140的visual studio 15。

我的问题是,我是不正确地使用标准的第一个表格还是VC15在这个功能中被打破了? 并且是' final'的第二个例子。使用视觉特定或它也适用于gcc?

1 个答案:

答案 0 :(得分:1)

这是旧文档,finalthe virt-specifier,第二个代码是正确的。 N4296 10.3 / 4

  

如果某个B类中的虚函数f标有   virt-specifier final和在D中派生自D的函数D :: f   覆盖B :: f,程序格式不正确。

struct B {
virtual void f() const final;
};
struct D : B {
void f() const; // error: D::f attempts to override final B::f
};