根据本文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?
答案 0 :(得分:1)
这是旧文档,final
是the 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
};