Le compilo a le choix entre 2 cast possibles, et ne peut pas décider seul. On pourrait surcharger l'opérateur encore une fois qui s'occuperait de caster "proprement".
En gros dans ton exemple on ajouterait quelque chose du genre : A & operator << (int B) { return this << (unsigned long int) B;}
C'est surement faux syntaxiquement et c'est pas testé, mais c'est juste pour donner l'idée et a priori ça lève l'ambiguité, vu qu'il trouve une méthode dont la signature correspond parfaitement (sans étape de cast implicite). Il suffit alors de surcharger tous les cas envisageables (c'est bourrin, d'ou l'interet du template dans le premier commentaire).
L'ambiguité ne vient pas de ta lib, mais d'un conflit à l'utilisation avec une autre lib, dans ce cas la lib standard. Si tu veux être sûr du sucre syntaxique que tu proposes à l'utilisateur, je pense qu'il vaut mieux gérer tous les cas dans ta lib et faire du code déterministe plutôt que de te reposer sur les mécanismes de sucre syntaxique proposés par le compilo (cast implicite par exemple).
# Re: Problèmes de compilation g++ (suite)
Posté par inz . En réponse au journal Problèmes de compilation g++ (suite). Évalué à 2.
En gros dans ton exemple on ajouterait quelque chose du genre :
A & operator << (int B) { return this << (unsigned long int) B;}
C'est surement faux syntaxiquement et c'est pas testé, mais c'est juste pour donner l'idée et a priori ça lève l'ambiguité, vu qu'il trouve une méthode dont la signature correspond parfaitement (sans étape de cast implicite). Il suffit alors de surcharger tous les cas envisageables (c'est bourrin, d'ou l'interet du template dans le premier commentaire).
L'ambiguité ne vient pas de ta lib, mais d'un conflit à l'utilisation avec une autre lib, dans ce cas la lib standard. Si tu veux être sûr du sucre syntaxique que tu proposes à l'utilisateur, je pense qu'il vaut mieux gérer tous les cas dans ta lib et faire du code déterministe plutôt que de te reposer sur les mécanismes de sucre syntaxique proposés par le compilo (cast implicite par exemple).