2011-07-02 16 views
9

Tengo algunos problemas para usar decltype de punteros a funciones miembro:Usando decltype con punteros de función miembro

#include <iostream> 
#include <type_traits> 

struct A 
{ 
    void func1() {} 
    typedef decltype(&A::func1) type; 
}; 

int wmain(int argc, wchar_t* argv[]) 
{ 
    typedef decltype(&A::func1) type; 

    //Case 1 
    std::wcout 
     << std::boolalpha 
     << std::is_member_function_pointer<type>::value 
     << std::endl; 

    //Case 2 
    std::wcout 
     << std::boolalpha 
     << std::is_member_function_pointer<A::type>::value 
     << std::endl; 

    system("pause"); 
    return 0; 
} 

Caso 1 imprime true como se esperaba, pero Caso 2 grabados false.

¿Está decltype quitando la propiedad "miembro" de un tipo? Si es así, ¿por qué?

Además, ¿hay alguna manera de evitar este comportamiento? Necesito obtener el tipo de función miembro independientemente de dónde use decltype.

Por favor ayuda.

EDIT:

Reported to Microsoft

+2

Parece que hay otra limitación con 'decltype' en la implementación actual de MSVC ... – Xeo

+5

Acaba de comprobar con gcc 4.7, se emite' true' para ambos casos. – Vitus

+2

@Xeo @Vitus Gracias. Microsoft arruina todo ... – Nubcase

Respuesta

3

Por el bien de formalidad (que tiene una respuesta a la pregunta), esto parece ser un error en el compilador de VC2010. Archive un informe de error para que Microsoft pueda arreglarlo en la próxima versión.

Cuestiones relacionadas