fork download
  1. #include <iostream>
  2. #include <tuple>
  3.  
  4. #if 1 // Not in C++11 // make_index_sequence
  5. #include <cstdint>
  6.  
  7. template <std::size_t...> struct index_sequence {};
  8.  
  9. template <std::size_t N, std::size_t... Is>
  10. struct make_index_sequence : make_index_sequence<N - 1, N - 1, Is...> {};
  11.  
  12. template <std::size_t... Is>
  13. struct make_index_sequence<0u, Is...> : index_sequence<Is...> {};
  14.  
  15. #endif // make_index_sequence
  16.  
  17. namespace detail
  18. {
  19.  
  20. template <typename Tuple, typename T, std::size_t...Is>
  21. Tuple output(const Tuple& t, const T& x, index_sequence<Is...>)
  22. {
  23. return Tuple{(std::get<Is>(t) << x)...};
  24. }
  25. }
  26.  
  27. template <typename ...Args, typename T>
  28. std::tuple<Args&...> operator<<(const std::tuple<Args&...>& t, const T& x)
  29. {
  30. return detail::output(t, x, make_index_sequence<sizeof...(Args)>());
  31. }
  32.  
  33. int main()
  34. {
  35. std::tie(std::cout, std::cout) << "Foo" << "Bar";
  36. return 0;
  37. }
  38.  
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
FooFooBarBar