【问题标题】:Using decltype with virtual member function pointers将 decltype 与虚拟成员函数指针一起使用
【发布时间】:2012-07-05 15:27:42
【问题描述】:

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
}

这是一个错误吗?

【问题讨论】:

  • 如果它是“非法的”,它会生成错误消息,而不是内部错误。您显然在编译器中发现了一个错误。
  • @AndreyT:+1,我要补充一点:即使它是非法的,也不应该导致内部错误。

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


【解决方案1】:

MSVC 在decltype 到成员函数指针方面存在多个已知问题;另见Using decltype with member function pointers

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

【讨论】:

    猜你喜欢
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2015-04-18
    相关资源
    最近更新 更多