fork(1) download
  1. #include <iostream>
  2. #include <utility>
  3. #include <tuple>
  4.  
  5.  
  6. template <typename ... Args>
  7. void f(Args... args)
  8. {
  9. int dummy[] = {0, (std::cout << " " << std::forward<Args>(args), 0)...};
  10. }
  11.  
  12. namespace detail
  13. {
  14.  
  15. template<std::size_t I>
  16. struct impl
  17. {
  18. template <typename TUPLE>
  19. auto operator() (TUPLE&& t) { return std::get<I>(t); }
  20. };
  21.  
  22. template<>
  23. struct impl<2>
  24. {
  25. template <typename TUPLE>
  26. auto operator() (TUPLE&& t) { return std::get<2>(t) + 40; }
  27. };
  28.  
  29. template <std::size_t... Is, typename TUPLE>
  30. void bar(std::index_sequence<Is...>, TUPLE&& Tuple) {
  31. return f(impl<Is>{}(std::forward<TUPLE>(Tuple))...);
  32. }
  33.  
  34. }
  35.  
  36. template<typename... Args>
  37. void bar(Args... args) {
  38. detail::bar(std::index_sequence_for<Args...>(), std::forward_as_tuple(args...));
  39. }
  40.  
  41. int main() {
  42. bar(0, 1, 2, 3, 4, 5, 6);
  43.  
  44. }
Success #stdin #stdout 0s 3096KB
stdin
Standard input is empty
stdout
 0 1 42 3 4 5 6