Domanda

Considera il seguente codice:

template<class T, class F>           struct X {};
template<class T, class F, T F::* m> struct Y {};

struct Foo {
    int member;
    typedef X<int, Foo>               x_type; // works well
    typedef Y<int, Foo, &Foo::member> y_type; // ERROR
};

typedef Y<int, Foo, &Foo::member> y_type2; // OK

Perché il compilatore genera errori? (VS2008)


Nuovo

Ho inviato questo errore a connect.microsoft.com .

È stato utile?

Soluzione 2

Questo è un bug

Altri suggerimenti

Penso che sia in qualche modo correlato a quel Visual C ++ che non conosce la dimensione del puntatore al membro in quel punto. Controllare questo rapporto sui difetti, ad esempio ( qui è un altro problema con il puntatore alla variabile membro). Penso che tu abbia trovato un altro bug di Visual C ++ e dovrebbe essere segnalato a connect.microsoft.com.

Mi sono imbattuto nello stesso problema. Il supporto per gli argomenti del modello da puntatore a membro è ancora limitato in VC ++ (vedere report di bug ) .

Nel mio caso ho potuto aggirare il problema utilizzando una funzione modello i.s.o. una classe modello:

template< typename Class > struct CMemberDumper {
    Class& object;
    template< typename M > void visit_member( M C::*pm ) {
       std::cout << object.*pm;
    }
};
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top