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:
Parece que hay otra limitación con 'decltype' en la implementación actual de MSVC ... – Xeo
Acaba de comprobar con gcc 4.7, se emite' true' para ambos casos. – Vitus
@Xeo @Vitus Gracias. Microsoft arruina todo ... – Nubcase