2012-07-05 8 views
6

decltypeを仮想メンバ関数ポインタに使用することはできますか?仮想メンバ関数ポインタでの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 
} 

それはバグですか?

+9

内部エラーではなく、エラーメッセージを生成するのは「違法」でした。あなたは明らかにコンパイラにバグを発見しました。 – AnT

+3

@AndreyT:+1、私はそれを追加します:*たとえそれが違法であっても、それは内部エラーを引き起こすべきではありません。 –

答えて

4

MSVCには、メンバ関数ポインタに対するdecltypeの複数の既知の問題があります。 Using decltype with member function pointers

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

+0

thx。 BTWのリンクも私の質問の一つです。 ;-) – Nubcase

関連する問題