6

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
}

バグですか?

4

1 に答える 1

4

MSVCにはdecltype、メンバー関数ポインターに関する複数の既知の問題があります。メンバー関数ポインターでのdecltypeの使用も参照してください。

これは正当な構文です。g ++はそれに完全に満足しています(http://ideone.com/sTZi6)。decltype規格には、メンバー関数の動作を制限するものはありません。

于 2012-07-05T17:18:01.787 に答える