Why does this code not compile?
#include <sstream>
void f(std::stringstream) { }
int main() {
f(std::stringstream{});
}
I get this error:
error: use of deleted function ‘std::basic_stringstream<char>::basic_stringstream(const std::basic_stringstream<char>&)’
f(std::stringstream{});
^
If I replace std::stringstream
with another type that's noncopyable it works fine. Shouldn't this use stringstream
's move constructor?
The missing move constructor for
stringstream
is a known missing feature in GCC's implementation of the C++ standard library. If I'm reading the comments on that report correctly, it is intentionally missing because it would rely on other changes, and those other changes would break the ABI, so the GCC folks have chosen to break the ABI only once (if possible), and that time has not yet come.