• [^] # Re: Les concepts, c'est du sucre

    Posté par . En réponse à la dépêche Retard(s) pour la prochaine version de C++. Évalué à 1.

    Tiens, allez, si, je vous montre. C'est tellement cradingue et inexpressif que ça vaut le coup d'être vu :

    /*
    * Utility types
    */
    typedef char yes_type;

    struct no_type
    {
    char padding[8];
    };



    /*
    * list_node type trait
    */
    namespace list_node_check
    {
    template<class T>
    static
    yes_type
    check_sig(typename T::item*);

    template<class T>
    static
    no_type
    check_sig(...);
    }

    template<class T>
    struct is_list_node
    {
    static const bool value = sizeof(list_node_check::check_sig(0)) == sizeof(yes_type);
    };



    /*
    * optional_node type trait
    */
    template<class T>
    struct is_optional_node
    {
    static const bool value = false;
    };

    template<class T>
    struct is_optional_node<syntax_nodes::optional_node>
    {
    static const bool value = true;
    };


    Un exemple d'intuitivité.

    Et encore, je suis sûr qu'on peut trouver des alternatives bien pires à ce qu'auraient proprement permis les concepts.