Je ne peux pas avoir accès au pointeur sur membre. Pourquoi?
-
05-07-2019 - |
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 .
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;
}
};