Так как ответа не было, я думаю, я продолжу.
Подпись для ostream_iterator
принимает C-строку, а не строку C ++:
std::ostream_iterator(ostream_type& stream, const CharT* delim)
Было выбрано, что неявное приведение к char *
из std::string
нежелательно, как сказано здесь , поэтому вы получаете ошибку.
Чтобы это сработало, вы можете просто разыграть std::string
самостоятельно:
std::ostream_iterator<T> ostr_it(std::cout, sep); // DOES NOT WORK
std::ostream_iterator<T> ostr_it(std::cout, sep.c_str()); // WORKS