Si j´ai bien compris ( mais c´est po sur ! )
Ben y a une impossibilité ici ! !!!!
Extrait de la Doc Micro...
"The following operators can only be overloaded in class scope as nonstatic members: assignment operator ´=´, class member access operator ´->´, subscripting operator ´[]´, and function call operator ´( ) ´."
Voila comment je vois la chose "schematiquement":
class A {....}
class B {....}
A P1;
B P2;
P2 = P1;
ceci equivaux a
P2.=(P1);
Donc l´operateur = pris est celui definit par P2.
Or si P2 est de type void*
alors le = est le = du void* ( Heurk ! !)
C´est pour cela que que si P1 est de type different, tu est prié de faire un petit cast alors P2 = ( void*)P1; equivaux a P2.=((void*)P1)
-et ca ton compilo il aime ! !! -
La valeur retourné par l´operateur egal ne sert qu´a permetre un truc du style
P1=P2=P3;
Lors de l´execution cela ce traduit par :
P1.=( P2.=(P3));
Hors si l´operateur egal renvoie rien alors l´affectation de P1 ne se fait pas ( puisqu´il n´a rien a affecter)
A ta place je ferais soit :
P1 = P2.GetPtr(); //Accesseur normal
Si vraiment tu veux passer par un operateur
P2>>P1; // Note alors que j´ai contourné le probleme en placant P2 comme instance primaire de l´operation ! !!
La declaration de >> est donc
void* P2::operator >>(void* &);
Et la j´avoue que cela me file des bouton de filer une reference sur un pointeur ( mais chacun son avis )
Je prefere alors plutot
P2>>&1
avec
void* P2::operator >>(void** VoidPtr);
Cela te convient il ?