【发布时间】:2012-06-30 04:58:29
【问题描述】:
看代码:
template <class x> struct Foo
{
int getX(x *p) { return(0); }
enum E12 { a };
};
template <> int Foo<int>::getX(int*)
{
return(-15);
}
template <> enum Foo<int>::E12
{
a, b, c
}
正如Cannot overload function 中讨论的那样,第一个专业化是合法的,甚至可以在 MSVC 中使用。而 enum 的第二个特化甚至不想编译,说“错误 C2988:无法识别的模板声明/定义”。
在我看来,C++ 正在为方法制造相对不合逻辑的例外。枚举只是一个例子。同样的事情可以应用于成员类、typedef等。
如果有人对此发表评论,我会很高兴。
【问题讨论】:
-
@MooingDuck,感谢您指出错误的语法。固定。
-
Ups,上面的评论应该是@Potatoswatter。
标签: c++