astrid <wang_a(a)epita.fr> writes:
[...]
Pour afficher mon point, je dois alors écrire :
::operator<<(os, p);
C'est pas très joli. C'est moi qui fume, ou bien ?
Je vote pour un opérateur déclaré dans le mauvais namespace. En effet,
le code suivant :
namespace foo {
struct bar;
}
namespace std {
class ostream&
std::ostream& operator<<(std::ostream&, char);
}
std::ostream& operator<<(std::ostream&, const foo::bar&);
... est une faute de style, l'implémentation de "op<<" pour
"bar"
devrait être définie dans le namespace foo.
Voir le koening lookup: une fonction hors de foo: et hors de std: qui
invoque "cout << bar()" n'a pas de raison d'aller chercher
l'opérateur
dans le namespace parent si des _candidats_, même incompatibles, sont
trouvés dans le namespace de l'un ou l'autre des arguments, et il y a
des candidats dans le namespace des ostreams (std).
Mais c'est une situation assez obscure et les compilateurs sont tous
plus ou moins tolérants dans leur recherche d'une implémentation
compatible.
Je voudrais bien voir ton code aussi.
--
. Raphaël Poss . . _ - --------\
: EPITA CSI 2003 ICQ 1757157 |
| EpX -- ACU -- Activ' GnuPG fp bda2eb602866390c7a7d :
\------ - _ . . a13ad7c86dd33b72e72b '