可変引数テンプレートのリスト処理 - sum

sumは、整数値の可変引数テンプレートのパラメータパックを合計するメタ関数です。

template <int... Args>
struct sum;

template <int Head, int... Tail>
struct sum<Head, Tail...> {
    static const int value = Head + sum<Tail...>::value;
};

template <>
struct sum<> {
    static const int value = 0;
};
sum<1, 2, 3, 4, 5>::value
→ 15