2017-06-13 59 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'完全支持整個標準。 –