Question

Considérez le code suivant:

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

Pourquoi le compilateur génère-t-il une erreur? (VS2008)

Nouveau

J'ai posté ce bogue sur connect.microsoft.com .

Était-ce utile?

La solution 2

Ceci est un bug

Autres conseils

Je pense que cela est lié d'une manière ou d'une autre à ce que Visual C ++ ne connaisse pas la taille du pointeur sur le membre à ce stade. Vérifiez ce rapport de défaillance par exemple ( ici est un autre problème lié au pointeur sur la variable membre). Je pense que vous avez trouvé un autre bogue Visual C ++ et qu’il devrait être signalé à connect.microsoft.com.

Je suis tombé sur le même problème. La prise en charge des arguments de modèle pointeur vers membre est toujours limitée dans VC ++ (voir rapport de bogue ). .

Dans mon cas, je pourrais contourner le problème en utilisant un modèle de fonction i.s.o. une classe de template:

template< typename Class > struct CMemberDumper {
    Class& object;
    template< typename M > void visit_member( M C::*pm ) {
       std::cout << object.*pm;
    }
};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top