これでどうだ!? template <typename string_t, typename container_t> string_t join(const container_t& c, const string_t& sep) { string_t result; auto it = c.begin(); auto end = c.end(); if (it != end) { result = *it; for (++it; it != end; ++it) { result += sep; result += *it; } } return result; }