将decltype
与虚拟成员函数指针一起使用是否合法?
以下内容使用VS2012生成内部错误(C1001)。
struct C
{
virtual void Foo() {}
typedef decltype(&C::Foo) type; //pointer
}
但是编译得很好:
struct C
{
virtual void Foo() {}
typedef decltype(C::Foo) type; //not pointer
}
这是一个错误吗?
答案 0 :(得分:4)
MSVC有decltype
个成员函数指针的多个已知问题;另见Using decltype with member function pointers
这是合法的语法; g ++非常满意(http://ideone.com/sTZi6)。标准中没有任何内容限制decltype
对成员函数的操作。