fork download
  1. #include <utility>
  2. #include <tuple>
  3.  
  4. 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)...)); }
  5.  
  6. int main() { make_foo(1 + 1); make_foo2(1 + 1); }
Success #stdin #stdout 0s 3292KB
stdin
Standard input is empty
stdout
Standard output is empty