fork(1) download
  1. #include <iostream>
  2.  
  3. template<class A, class B>
  4. struct P;
  5.  
  6. template<class... Ts>
  7. struct L {using type=L;};
  8.  
  9. template<class T, class... Ts>
  10. using mul = L<P<T, Ts>...>;
  11.  
  12. template<class...>
  13. struct cat;
  14. template<class...Ts>
  15. using cat_t=typename cat<Ts...>::type;
  16.  
  17. template<class... Ts>
  18. struct cat<L<Ts...>>:
  19. L<Ts...>
  20. {};
  21.  
  22. template<class... As, class... Bs>
  23. struct cat<L<As...>, L<Bs...>>:
  24. L<As...,Bs...>
  25. {};
  26.  
  27. template<class A, class B, class... Ts>
  28. struct cat<A, B, Ts...>:
  29. cat< cat_t<A,B>, Ts... >
  30. {};
  31.  
  32. template<class A, class B>
  33. struct join;
  34.  
  35. template<class... As, class... Bs>
  36. struct join<L<As...>, L<Bs...>>:
  37. cat<mul<As, Bs...>...>
  38. {};
  39. template<class A, class B>
  40. using join_t=typename join<A,B>::type;
  41.  
  42. int main() {
  43. // your code goes here
  44. return 0;
  45. }
Success #stdin #stdout 0s 3336KB
stdin
Standard input is empty
stdout
Standard output is empty