2012-07-05 17 views
6

¿Es legal usar decltype con punteros de función de miembro virtuales?Uso de decltype con punteros de función de miembro virtual

Lo siguiente genera un error interno (C1001) con VS2012.

struct C 
{ 
    virtual void Foo() {} 

    typedef decltype(&C::Foo) type; //pointer 
} 

Pero esto compila bien:

struct C 
{ 
    virtual void Foo() {} 

    typedef decltype(C::Foo) type; //not pointer 
} 

¿Es un error?

+9

Si era "ilegal" generaría un mensaje de error, no un error interno. Obviamente, encontraste un error en el compilador. – AnT

+3

@AndreyT: +1, agregaría que: * incluso si fuera ilegal, no debería causar un error interno *. –

Respuesta

4

MSVC tiene varios problemas conocidos con decltype en los punteros de funciones de miembros; ver también Using decltype with member function pointers

Esto es sintaxis legal; g ++ está perfectamente satisfecho con él (http://ideone.com/sTZi6). No hay nada en el estándar que restrinja la operación de decltype en las funciones de miembro.

+0

thx. Por cierto, el enlace es también una de mis preguntas. ;-) – Nubcase

Cuestiones relacionadas