#include <iostream>
#include <tuple>
#include <string>
template <class... ArgsL>
struct tuple_maker {
typedef std::tuple<ArgsL...> tuple_left;
tuple_maker(tuple_left const & tl = tuple_left()): tuple_(tl) {}
tuple_left tuple_;
template <class ArgR>
tuple_maker<ArgsL..., ArgR> operator , (ArgR const & r)
{
return std::tuple_cat(tuple_, std::make_tuple(r));
}
operator tuple_left & () { return tuple_; }
};
tuple_maker<> tuple_of() { return tuple_maker<>(); }
int main()
{
std::tuple<char, double, int> mytup;
mytup = (tuple_of(), 'a', 145.21, 100);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHVwbGU+CiNpbmNsdWRlIDxzdHJpbmc+Cgp0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJnc0w+CnN0cnVjdCB0dXBsZV9tYWtlciB7CiAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8QXJnc0wuLi4+ICAgIHR1cGxlX2xlZnQ7CiAgICB0dXBsZV9tYWtlcih0dXBsZV9sZWZ0IGNvbnN0ICYgdGwgPSB0dXBsZV9sZWZ0KCkpOiB0dXBsZV8odGwpIHt9CiAgICAKICAgIHR1cGxlX2xlZnQgIHR1cGxlXzsKICAgIAogICAgdGVtcGxhdGUgPGNsYXNzIEFyZ1I+CiAgICB0dXBsZV9tYWtlcjxBcmdzTC4uLiwgQXJnUj4gb3BlcmF0b3IgLCAoQXJnUiBjb25zdCAmIHIpCiAgICB7CiAgICAgICAgcmV0dXJuIHN0ZDo6dHVwbGVfY2F0KHR1cGxlXywgc3RkOjptYWtlX3R1cGxlKHIpKTsKICAgIH0KICAgIAogICAgb3BlcmF0b3IgdHVwbGVfbGVmdCAmICgpIHsgcmV0dXJuIHR1cGxlXzsgfQp9OwoKdHVwbGVfbWFrZXI8PiB0dXBsZV9vZigpIHsgcmV0dXJuIHR1cGxlX21ha2VyPD4oKTsgfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnR1cGxlPGNoYXIsIGRvdWJsZSwgaW50PiAgbXl0dXA7CiAgICBteXR1cCA9ICh0dXBsZV9vZigpLCAnYScsIDE0NS4yMSwgMTAwKTsKICAgIHJldHVybiAwOwp9