返回std :: stringstream - 编译失败

Bia*_*sta 3 c++ gcc move-semantics c++11

我正在尝试编译此代码:

#include <sstream>

std::stringstream foo() {
  std::stringstream log;
  log << "Hello there\n";
  return log;
}
Run Code Online (Sandbox Code Playgroud)

GCC 4.9.2给我以下错误(带-std=c++11):

[x86-64 gcc 4.9.2] error: use of deleted function
    'std::basic_stringstream<char>::basic_stringstream(const std::basic_stringstream<char>&)'
Run Code Online (Sandbox Code Playgroud)

是一个例子.

既然std::stringstreammove constructor,为什么要调用复制构造函数,而不是移动构造函数?

注意:从GCC 5代码编译正确:见这里.

Som*_*ken 5

如果我们看一下GCC 5的变化,我们可以看到:

完全支持C++ 11,包括以下新功能:

  • std :: deque和std :: vector满足分配器感知容器的要求;
  • 可移动和可交换的iostream类;

...

粗体的变化是使你的代码在GCC 5上编译而在4.9上编译失败的原因,移动构造函数还没有实现std::stringstream.