A little late to the party, but I liked the fact that we can use initializer lists:
std::string join(std::initializer_list i)
{
std::vector v(i);
std::string res;
for (const auto &s: v) res += s;
return res;
}
Then you can simply invoke (Python style):
join({"Hello", "World", "1"})