使用带有虚拟成员函数指针的decltype

时间:2012-07-05 15:27:43

标签: c++ visual-studio visual-c++ c++11

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
}

这是一个错误吗?

1 个答案:

答案 0 :(得分:4)

MSVC有decltype个成员函数指针的多个已知问题;另见Using decltype with member function pointers

这是合法的语法; g ++非常满意(http://ideone.com/sTZi6)。标准中没有任何内容限制decltype对成员函数的操作。