为什么我不能通过值将rvalue std :: stringstream传递给函数?

时间:2013-12-15 02:03:44

标签: c++ c++11 move-semantics rvalue

为什么这段代码不能编译?

#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的移动构造函数吗?

1 个答案:

答案 0 :(得分:7)

在GCC的C ++标准库实现中,stringstream缺少的移动构造函数是a known missing feature。如果我正确地阅读该报告的评论,它会故意丢失,因为它会依赖其他变化,而其他变化会破坏ABI,因此GCC人员选择仅打破ABI一次(如果可能),那个时间还没来。

相关问题