虚拟方法在C++ 0x中不能"删除"吗?

iam*_*ind 4 c++ virtual c++11

当我们尝试delete一种virtual方法时,错误消息似乎与场景有点错误.

prog.cpp:4:16: error: deleted function 'virtual void Test::foo()'
prog.cpp:8:2: error: used here
Run Code Online (Sandbox Code Playgroud)

struct Test : public Base
{
  Test() {}
  virtual void foo () = delete;  // error
};
Run Code Online (Sandbox Code Playgroud)

virtual方法不delete能够出于同样的原因,为什么他们不能在C++ 03仍未得到执行?有没有办法提到Test故意没有实现virtual foo()

Dav*_*eas 9

术语" 使用"在标准中有一个具体的定义,特别是对于虚函数,odr-used的定义是:

§3.2/ 2(C++ 0x FDIS)[...]如果虚拟成员函数不纯,则使用它是有用的.[...]

ODR使用的是在即将到来的标准,指的是什么明明白白以前的标准称为一个新名词使用:

§3.2/ 2(当前标准)[...]如果虚拟成员函数不纯,则使用虚拟成员函数.[...]

我的看法是错误消息使用了用于指代在这种特定情况下使用的odr的术语,是的,这是违规的原因与您不能使非纯虚拟成员函数未实现的原因完全相同.