#include <iostream>
template<typename T>
auto sum_impl(T accumulated)
{
return accumulated;
}
template<typename T, typename... Args>
auto sum_impl(T accumulated, T value, Args... args)
{
return sum_impl(accumulated + value, args...);
}
template<typename... Args>
auto sum(Args... args)
{
return sum_impl(0, args...);
}
int main(int argc, char* argv[])
{
std::cout << sum(5, 3, 4, 5, 2, 3, 5);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KYXV0byBzdW1faW1wbChUIGFjY3VtdWxhdGVkKQp7CiAgICByZXR1cm4gYWNjdW11bGF0ZWQ7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CmF1dG8gc3VtX2ltcGwoVCBhY2N1bXVsYXRlZCwgVCB2YWx1ZSwgQXJncy4uLiBhcmdzKQp7CiAgICByZXR1cm4gc3VtX2ltcGwoYWNjdW11bGF0ZWQgKyB2YWx1ZSwgYXJncy4uLik7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CmF1dG8gc3VtKEFyZ3MuLi4gYXJncykKewoJcmV0dXJuIHN1bV9pbXBsKDAsIGFyZ3MuLi4pOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQp7CiAgICBzdGQ6OmNvdXQgPDwgc3VtKDUsIDMsIDQsIDUsIDIsIDMsIDUpOwogICAgcmV0dXJuIDA7Cn0=