fork download
  1. #include <functional>
  2. #include <iostream>
  3. #include <tuple>
  4. #include <type_traits>
  5. #include <utility>
  6.  
  7. using namespace std;
  8.  
  9. template <typename Tuple, typename F, size_t begin, size_t end>
  10. enable_if_t<begin == end || tuple_size<Tuple>::value < end> for_each(Tuple&, F&&) {
  11. }
  12.  
  13. template <typename Tuple, typename F, size_t begin = 0U, size_t end = tuple_size<Tuple>::value>
  14. enable_if_t<begin < end && tuple_size<Tuple>::value >= end> for_each(Tuple& t, F&& f) {
  15. f(get<begin>(t));
  16. for_each<Tuple, F, begin + 1, end>(t, forward<F>(f));
  17. }
  18.  
  19.  
  20.  
  21. int main() {
  22. auto t = make_tuple(3.14, "Hello World!", -1);
  23. auto f = [](const auto& i) { cout << i; };
  24.  
  25. for_each<decltype(t), decltype(f), 1>(t, forward<decltype(f)>(f));
  26. }
Success #stdin #stdout 0s 3456KB
stdin
Standard input is empty
stdout
Hello World!-1