2011-07-02 19 views
9

mam pewne problemy z używaniem decltype dla wskaźników funkcji użytkownika:Korzystanie decltype ze wskaźników funkcji członkowskich

#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; 
} 

Przypadek 1 drukuje true zgodnie z oczekiwaniami, ale przypadek 2 druki false.

Czy decltype rozbiera własności "członka" danego typu? Jeśli tak, dlaczego?

Czy istnieje sposób, aby temu zapobiec? Muszę uzyskać typ funkcji członka niezależnie od tego, gdzie używam decltype.

Proszę o pomoc.

EDIT:

Reported to Microsoft

+2

Wydaje się, że jest to kolejne ograniczenie z 'decltype' w aktualnej implementacji MSVC ... – Xeo

+5

Właśnie sprawdzane z gcc 4.7, wypisuje" true "dla obu przypadków. – Vitus

+2

@Xeo @Vitus Dzięki. Microsoft rujnuje wszystko ... – Nubcase

Odpowiedz

3

Dla formalności (o odpowiedź na pytanie), to wydaje się być błąd w kompilatorze VC2010 jest. Złóż raport o błędzie, aby firma Microsoft mogła go naprawić w następnej wersji.

Powiązane problemy