template <typename H, typename ... T> auto add(H head, T... tail) { return (head + ... + tail); // expands to: head + tail[0] + tail[1] + ... } If we’re willing to abuse operator evaluation rules and fold expressions, we can do a lot more. This blog posts collects useful tricks. Whenever possible, we should process a parameter pack with fold expression instead of using recursion: It is less code t