Considérons le code suivant (tiré de https://en.cppreference.com/w/cpp/language/cast_operator )
struct To {
To() = default;
To(const struct From&) {} // converting constructor
};
struct From {
operator To() const {return To();} // conversion function
};
int main()
{
From f;
To t2 = f; // copy-initialization: ambiguous
// (note, if conversion function is from a non-const type, e.g.
// From::operator To();, it will be selected instead of the ctor in this case)
}
Comme le disent les commentaires, la ligne suivante est en effet ambiguë car il y a deux candidats (La fonction de conversion et le constructeur de conversion sont également applicables)
To t2 = f; //compile error
Cependant, comme le dit la note, si je supprime l'option const
del conversion
ce qui donne le code suivant :
struct From {
operator To() {return To();} // conversion function
};
L'appel compile bien.
Le site const
ne doit pas affecter l'attribut conversion
la valeur de retour de la fonction, alors pourquoi l'appel n'est plus ambigu ?