模板功能的特化可以是虚拟的吗?

Pup*_*ppy 5 c++ visual-studio-2010

例如,像

class A {
    template<typename T> T DoStuff();
    template<> virtual int DoStuff<int>() = 0;
};
Run Code Online (Sandbox Code Playgroud)

Visual Studio 2010说没有,但我觉得很简单,我只是搞砸了语法.成员函数模板的显式完全特化是否可以是虚拟的?

Fle*_*exo 8

明确的专业化在一个类中是不合法的.即使你可以使它部分特化,你仍然会遇到"模板不能虚拟"的问题.

n3290,§14.5.2规定:

成员函数模板不应是虚拟的.

并给出了这个例子:

template <class T> struct AA {
  template <class C> virtual void g(C); // error
  virtual void f(); // OK
};
Run Code Online (Sandbox Code Playgroud)

在继续说明成员函数模板也不计入虚拟覆盖之前.