• [^] # Re: En C++...

    Posté par . 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 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

    template <typename TYPE2>
    bool operator==(const StrongId<DISCRIMINANT, TYPE2> & other)
    {
     return _type == other._type;
    }
    
    

    et que tu voulais comparer un StrongId<DistanceDiscriminant, int> et un StrongId<DistanceDiscriminant, std::string> (même si ça n'a aucun sens).