• [^] # Re: et avec les fold-expressions ?

    Posté par . En réponse au journal Constexpr versus template. Évalué à 4.

    Comme l'a fait remarquer SChauveau, les fold-expressions utilisent des packs. Il faut donc en créer un, par exemple avec make_integer_sequence :

    template <typename T>
    struct count_impl;
    template <int... Ints>
    struct count_impl<std::integer_sequence<int, Ints...>>
    {
     static constexpr int value = (0 + ... + Ints); 
    };
    template <int N>
    constexpr int count = count_impl<std::make_integer_sequence<int, N+1>>::value;

    Mais ça utilise des templates avec plein de paramètres, sûrement très lourds. Alors qu'on pourrait simplement utiliser une boucle for.

    template <int N>
    constexpr int count = [](){
     int s = 0;
     for (int i = 1; i <= N; i++)
     s += i;
     return s;
    }();

    Mais je n'ai pas fait de benchmarks pour comparer, peut-être que je me trompe.