Sauf que dans ce cas là, c'est une vraie erreur de type.
Tu à un objet de type StrongId<DistanceDiscriminant, int> à comparer avec un StrongId<TempsDiscriminant, int>, or la substitution donne bool StrongId<DistanceDiscriminant, int>::operator==(const StrongId<DistanceDiscriminant, int> & other) (ça manquerai d'un const d'ailleurs)
Tu à donc une méthode qui prend un const StrongId<DistanceDiscriminant, int> & auquel tu essaye de faire passer un StrongId<TempsDiscriminant, int>& et le compilateur ne trouve pas de conversion implicite possible. Ce n'est pas différent de faire passer un int pour un std::string.
Ça aurai pu être une erreur d'instanciation si c'était défini comme étant
[^] # Re: En C++...
Posté par Batchyx . En réponse au journal Les types fantômes. Évalué à 5.
Sauf que dans ce cas là, c'est une vraie erreur de type.
Tu à un objet de type
StrongId<DistanceDiscriminant, int>à comparer avec unStrongId<TempsDiscriminant, int>, or la substitution donnebool StrongId<DistanceDiscriminant, int>::operator==(const StrongId<DistanceDiscriminant, int> & other)(ça manquerai d'unconstd'ailleurs)Tu à donc une méthode qui prend un
const StrongId<DistanceDiscriminant, int> &auquel tu essaye de faire passer unStrongId<TempsDiscriminant, int>&et le compilateur ne trouve pas de conversion implicite possible. Ce n'est pas différent de faire passer unintpour unstd::string.Ça aurai pu être une erreur d'instanciation si c'était défini comme étant
et que tu voulais comparer un
StrongId<DistanceDiscriminant, int>et unStrongId<DistanceDiscriminant, std::string>(même si ça n'a aucun sens).