为什么这段代码不能编译?
#include <sstream>
void f(std::stringstream) { }
int main() {
f(std::stringstream{});
}
我收到此错误:
error: use of deleted function ‘std::basic_stringstream<char>::basic_stringstream(const std::basic_stringstream<char>&)’
f(std::stringstream{});
^
如果我用另一种不可复制的类型替换std::stringstream
,它可以正常工作。这不应该使用stringstream
的移动构造函数吗?
答案 0 :(得分:7)
在GCC的C ++标准库实现中,stringstream
缺少的移动构造函数是a known missing feature。如果我正确地阅读该报告的评论,它会故意丢失,因为它会依赖其他变化,而其他变化会破坏ABI,因此GCC人员选择仅打破ABI一次(如果可能),那个时间还没来。