#include <iostream>
template<typename T, T ...>
struct add_all;
template<typename T, T X, T ... Rest>
struct add_all<T,X,Rest...>
{
constexpr static T value = X + add_all<T, Rest...>::value;
};
template<typename T>
struct add_all<T>
{
constexpr static T value = 0;
};
template<typename ... T>
void test()
{
constexpr auto size = add_all<std::size_t, sizeof(T)...>::value;
std::cout << size << std::endl;
}
int main()
{
test<int,char, double, char*>();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgVCAuLi4+CnN0cnVjdCBhZGRfYWxsOwoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgVCBYLCBUIC4uLiBSZXN0PgpzdHJ1Y3QgYWRkX2FsbDxULFgsUmVzdC4uLj4KewoJY29uc3RleHByIHN0YXRpYyBUIHZhbHVlID0gWCArIGFkZF9hbGw8VCwgUmVzdC4uLj46OnZhbHVlOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IGFkZF9hbGw8VD4KewoJY29uc3RleHByIHN0YXRpYyBUIHZhbHVlID0gMDsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIC4uLiBUPgp2b2lkIHRlc3QoKQp7Cgljb25zdGV4cHIgYXV0byBzaXplID0gYWRkX2FsbDxzdGQ6OnNpemVfdCwgc2l6ZW9mKFQpLi4uPjo6dmFsdWU7CglzdGQ6OmNvdXQgPDwgc2l6ZSA8PCBzdGQ6OmVuZGw7Cn0KCmludCBtYWluKCkKewoJdGVzdDxpbnQsY2hhciwgZG91YmxlLCBjaGFyKj4oKTsKfQ==