De manière générale, on évite la surchage d'un opérateur T() générique, car les effets de bord peuvent être étranges et dangereux. On préfèrera une fonction explicite (ou, dans ton cas, l'opérateur *() qui fait très bien ce boulot). C++1x change la donne, avec son opérateur de cast marqué du mot clef explicit qui permet de ne pas avoir les effets de bords qu'on connait.
Pour ton problème spécifique : la syntaxe est correcte (encore qu'on puisse spécifier une version const de l'opérateur, mais c'est autre chose). J'ai du mal à voir le rapport entre FederationAdmin et TeamMember - l'un est un type alias sur l'autre, je présume. Dans ce cas, il doit manquer quelque chose quelque part. Tu peux essayer de mettre l'expression complète entre parenthèses, la précédence de << étant relativement élevée. Tu devrais vérifier aussi l'existence d'une fonction
std::ostream& operator<<(std::ostream& o, const TeamMember& tm);
Attention : ne pas écrire cette fonction sous la forme d'un template, tu aurais des surprises.
Partager