fork download
  1. #include <iostream>
  2. #include <utility>
  3.  
  4. struct disambiguator_t {};
  5. const auto split = disambiguator_t();
  6.  
  7. template <typename ...Tn>
  8. void Print ( Tn&&... argn ) {
  9. using swallow = int[];
  10. (void)swallow{ (std::cout << argn << " ", 0)... };
  11. }
  12.  
  13. #include <type_traits>
  14.  
  15. template<class C, class T = int>
  16. using DisableIf = typename std::enable_if<!C::value, T>::type;
  17.  
  18. template<class... Ts, class... Vs>
  19. void cleave(Ts&&... ts, disambiguator_t const&, Vs&&... vs){
  20. Print( std::forward<Ts>( ts )... );
  21.  
  22. std::cout << std::endl << "Split!" << std::endl;
  23.  
  24. Print( std::forward<Vs>( vs )... );
  25. }
  26.  
  27. template<class... Ts, class U, class... Vs, DisableIf<std::is_same<U, disambiguator_t const&>> = 0>
  28. void cleave(Ts&&... ts, U&& u, Vs&&... vs){
  29. cleave<Ts..., U>(std::forward<Ts>(ts)..., std::forward<U>(u), std::forward<Vs>(vs)...);
  30. }
  31.  
  32. int main ( int argc, char** argv ) {
  33. cleave( 1, 2, 3, split, 4, 5, 6 );
  34.  
  35. }
Success #stdin #stdout 0s 2896KB
stdin
Standard input is empty
stdout
1 2 3 
Split!
4 5 6