• [^] # Re: Typage structurel

    Posté par (site web personnel) . En réponse au journal C++ Hell/Heaven et les concepts. Évalué à 3.

    template <typename T>
    void foo(T a)
    {
     a.baz();
    

    };

    Si plus loin tu appelle foo(10), on va récuperer une erreur lors de a.baz() disant que le type int n'a pas de méthode baz. Les assomptions sur T sont implicites. Et le problème c'est que cela peut se propager très très loin. Si l'appel à baz se fait après plusieurs résolution de type / appels de fonctions qui travaillent sur T, tu vas récupérer une erreur dans un bout de code que tu ne maîtrise pas du tout et largement hors du contexte. Alors que on peut supposer que le code de foo est correct et que le problème est au niveau de a.baz().

    En étant plus explicite sur le type de foo, l'erreur sera sans doute plus ciblée.