fork(1) download
  1. namespace detail
  2. {
  3. template<typename... Ts>
  4. struct do_foo;
  5.  
  6. template<typename T, typename... Ts>
  7. struct do_foo<T, Ts...>
  8. {
  9. static void call()
  10. {
  11. T::foo();
  12. do_foo<Ts...>::call();
  13. }
  14. };
  15.  
  16. template<typename T>
  17. struct do_foo<T>
  18. {
  19. static void call()
  20. {
  21. T::foo();
  22. }
  23. };
  24. }
  25.  
  26. template<typename... Ts>
  27. void do_foo()
  28. {
  29. detail::do_foo<Ts...>::call();
  30. }
  31.  
  32. #include <iostream>
  33.  
  34. struct X { static void foo() { std::cout << "X::foo()" << std::endl; }; };
  35. struct Y { static void foo() { std::cout << "Y::foo()" << std::endl; }; };
  36. struct Z { static void foo() { std::cout << "Z::foo()" << std::endl; }; };
  37.  
  38. int main()
  39. {
  40. do_foo<X, Y, Z>();
  41. }
  42.  
Success #stdin #stdout 0s 2896KB
stdin
Standard input is empty
stdout
X::foo()
Y::foo()
Z::foo()