#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;
}
I2luY2x1ZGUgPHR1cGxlPgojaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGU8dHlwZW5hbWUgRnVuLCB0eXBlbmFtZS4uLlRzPgp2b2lkIHNlcXVlbnRpYWxfZm9yZWFjaChGdW4gZiwgY29uc3QgVHMmLi4uIGFyZ3MpIHsKICBhdXRvIGZ1biA9IFsmXShjb25zdCBhdXRvJiBhcmcpe2YoYXJnKTsgcmV0dXJuIDA7fTsKICAodm9pZCkgc3RkOjppbml0aWFsaXplcl9saXN0PGludD57IGZ1bihhcmdzKS4uLiB9Owp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZS4uLlRzPgp2b2lkIHByaW50X2FsbChzdGQ6Om9zdHJlYW0mIHN0cmVhbSwgY29uc3QgVHMmLi4uIGFyZ3MpIHsKICBzZXF1ZW50aWFsX2ZvcmVhY2goCiAgICAgIFsmXShjb25zdCBhdXRvJiBhcmcpe3N0cmVhbSA8PCBhcmc7fSwKICAgICAgYXJncy4uLgogICAgICApOwp9CgppbnQgbWFpbigpCnsKICBzdGQ6OnN0cmluZyBzMSgic3RyaW5nMSIpOwogIHN0ZDo6c3RyaW5nIHMyKCJzdHJpbmcyIik7CiAgcHJpbnRfYWxsKHN0ZDo6Y291dCwgczEsIHMyKTsKCiAgcmV0dXJuIDA7Cn0K