fork download
  1. #include <iostream>
  2. using namespace std;
  3. template< typename OP, typename State, typename ...T>
  4. struct fold
  5. {
  6. typedef State type;
  7. };
  8.  
  9. template<typename OP, typename State, typename Head, typename... Tail>
  10. struct fold< OP, State, Head, Tail...>
  11. {
  12. typedef typename fold<OP, typename OP::template apply<State,Head>::type, Tail...>::type type;
  13. };
  14.  
  15. template<typename T>
  16. void foo()
  17. {
  18. std::cout << __PRETTY_FUNCTION__ << std::endl;
  19. }
  20.  
  21. struct op
  22. {
  23. template<typename X, typename Y>
  24. struct apply
  25. {
  26. typedef std::pair<X,Y> type;
  27. };
  28. };
  29.  
  30.  
  31. int main() {
  32. typedef fold< op, int, long, short, double, float>::type type;
  33. foo<type>();
  34. return 0;
  35. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
void foo() [with T = std::pair<std::pair<std::pair<std::pair<int, long int>, short int>, double>, float>]