#include <utility>
#include <tuple>
template<class Tuple> struct foo { Tuple t; foo(Tuple &&t) : t(std::move(t)) { } }; template<class... Args> using ForwardedTuple = decltype(std::forward_as_tuple(std::forward<Args>(std::declval<Args>())...)); template<class... Args> foo<ForwardedTuple<Args...>> make_foo(Args&&... args) { return {std::forward_as_tuple(std::forward<Args>(args)...)}; } template<class... Args> auto make_foo2(Args&& ...args) -> decltype(foo<decltype(std::forward_as_tuple(std::forward<Args>(args)...))>(std::forward_as_tuple(std::forward<Args>(args)...))) { return foo<decltype(std::forward_as_tuple(std::forward<Args>(args)...))>(std::forward_as_tuple(std::forward<Args>(args)...)); }
int main() { make_foo(1 + 1); make_foo2(1 + 1); }
I2luY2x1ZGUgPHV0aWxpdHk+IAojaW5jbHVkZSA8dHVwbGU+IAoKdGVtcGxhdGU8Y2xhc3MgVHVwbGU+IHN0cnVjdCBmb28geyBUdXBsZSB0OyBmb28oVHVwbGUgJiZ0KSA6IHQoc3RkOjptb3ZlKHQpKSB7IH0gfTsgdGVtcGxhdGU8Y2xhc3MuLi4gQXJncz4gdXNpbmcgRm9yd2FyZGVkVHVwbGUgPSBkZWNsdHlwZShzdGQ6OmZvcndhcmRfYXNfdHVwbGUoc3RkOjpmb3J3YXJkPEFyZ3M+KHN0ZDo6ZGVjbHZhbDxBcmdzPigpKS4uLikpOyB0ZW1wbGF0ZTxjbGFzcy4uLiBBcmdzPiBmb288Rm9yd2FyZGVkVHVwbGU8QXJncy4uLj4+IG1ha2VfZm9vKEFyZ3MmJi4uLiBhcmdzKSB7IHJldHVybiB7c3RkOjpmb3J3YXJkX2FzX3R1cGxlKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLil9OyB9IHRlbXBsYXRlPGNsYXNzLi4uIEFyZ3M+IGF1dG8gbWFrZV9mb28yKEFyZ3MmJiAuLi5hcmdzKSAtPiBkZWNsdHlwZShmb288ZGVjbHR5cGUoc3RkOjpmb3J3YXJkX2FzX3R1cGxlKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpPihzdGQ6OmZvcndhcmRfYXNfdHVwbGUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSkpIHsgcmV0dXJuIGZvbzxkZWNsdHlwZShzdGQ6OmZvcndhcmRfYXNfdHVwbGUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSk+KHN0ZDo6Zm9yd2FyZF9hc190dXBsZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKTsgfSAKCmludCBtYWluKCkgeyBtYWtlX2ZvbygxICsgMSk7IG1ha2VfZm9vMigxICsgMSk7IH0=