Почему я не могу скопировать-инициализировать поток строк из строки?

Следующий код не работает в GCC, Clang и Visual Studio:

#include <string>
#include <sstream>

int main() {
std::string s = "hello"; // ok, copy-initialization
std::stringstream ss1(s); // ok, direct-initialization
std::stringstream ss2 = s; // error
}

Я думал, что единственный случай, когда прямая инициализация работает, в то время как копирование-инициализация не работает, — это когда конструктор явный, чего не происходит в этом случае. В чем дело?

4

Решение

Этот конструктор является помечен как явный, поэтому может использоваться только с прямой инициализацией. §27.8.5:

explicit basic_stringstream(
ios_base::openmode which = ios_base::out | ios_base::in);

explicit basic_stringstream(
const basic_string<charT,traits,Allocator>& str,
ios_base::openmode which = ios_base::out | ios_base::in);

basic_stringstream(const basic_stringstream& rhs) = delete;

basic_stringstream(basic_stringstream&& rhs);

(То же самое верно для basic_stringbuf, basic_istringstream, а также basic_ostringstream.)

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]