2017-06-13 22 views
3

我试图编译这段代码:返回一个std :: stringstream的 - 编译失败

#include <sstream> 

std::stringstream foo() { 
    std::stringstream log; 
    log << "Hello there\n"; 
    return log; 
} 

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>&)' 

Here一个例子。

由于std::stringstreammove constructor,为什么复制构造函数被调用,而不是移动构造函数?

注意:从GCC 5代码正确编译:see here

回答

5

如果我们看一看在GCC 5 changes我们可以看到:

为C++ 11的全面支持,包括以下新的特点:

  • 的std ::双端队列和std ::向量符合分配器感知的容器要求;
  • 可移动和可交换的iostream类;

...

的变化以粗体是什么使你的代码编译的GCC 5和无法编译在4.9,此举构造函数只是尚未对std::stringstream实现。

+0

我认为自选项'-std = C++ 11','GCC 4.9.2'完全支持整个标准。 –