#include <tuple>
#include <initializer_list>
#include <iostream>
#include <string>
#include <vector>

template<typename Fun, typename...Ts>
void sequential_foreach(Fun f, const Ts&... args) {
  auto fun = [&](const auto& arg){f(arg); return 0;};
  (void) std::initializer_list<int>{ fun(args)... };
}

template<typename...Ts>
void print_all(std::ostream& stream, const Ts&... args) {
  sequential_foreach(
      [&](const auto& arg){stream << arg;},
      args...
      );
}

int main()
{
  std::string s1("string1");
  std::string s2("string2");
  print_all(std::cout, s1, s2);

  return 0;
}
