#include <iostream>
#include <tuple>
#include <type_traits>
template<std::size_t I = 0, typename... Tp>
typename std::enable_if<I == sizeof...(Tp) - 1, int>::type
elements_size(std::tuple<Tp...>&) {
return sizeof(typename std::tuple_element<I, std::tuple<Tp...>>::type);
}
template<std::size_t I = 0, typename... Tp>
typename std::enable_if<I < sizeof...(Tp) -1 && std::is_pod<typename std::tuple_element<I, std::tuple<Tp...>>::type>::value, int>::type
elements_size(std::tuple<Tp...>& t) {
return sizeof(typename std::tuple_element<I, std::tuple<Tp...>>::type) + elements_size<I + 1, Tp...>(t);
}
int main()
{
std::tuple<int, int, char> t;
std::cout << elements_size(t) << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHVwbGU+CiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KCnRlbXBsYXRlPHN0ZDo6c2l6ZV90IEkgPSAwLCB0eXBlbmFtZS4uLiBUcD4KdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SSA9PSBzaXplb2YuLi4oVHApIC0gMSwgaW50Pjo6dHlwZQplbGVtZW50c19zaXplKHN0ZDo6dHVwbGU8VHAuLi4+JikgeyAKICAgIHJldHVybiBzaXplb2YodHlwZW5hbWUgc3RkOjp0dXBsZV9lbGVtZW50PEksIHN0ZDo6dHVwbGU8VHAuLi4+Pjo6dHlwZSk7IAp9Cgp0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBJID0gMCwgdHlwZW5hbWUuLi4gVHA+CnR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPEkgPCBzaXplb2YuLi4oVHApIC0xICYmIHN0ZDo6aXNfcG9kPHR5cGVuYW1lIHN0ZDo6dHVwbGVfZWxlbWVudDxJLCBzdGQ6OnR1cGxlPFRwLi4uPj46OnR5cGU+Ojp2YWx1ZSwgaW50Pjo6dHlwZQplbGVtZW50c19zaXplKHN0ZDo6dHVwbGU8VHAuLi4+JiB0KSB7CiAgICByZXR1cm4gc2l6ZW9mKHR5cGVuYW1lIHN0ZDo6dHVwbGVfZWxlbWVudDxJLCBzdGQ6OnR1cGxlPFRwLi4uPj46OnR5cGUpICsgZWxlbWVudHNfc2l6ZTxJICsgMSwgVHAuLi4+KHQpOwp9CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6dHVwbGU8aW50LCBpbnQsIGNoYXI+IHQ7CiAgICBzdGQ6OmNvdXQgPDwgZWxlbWVudHNfc2l6ZSh0KSA8PCBzdGQ6OmVuZGw7CgogICAgcmV0dXJuIDA7Cn0=