为什么c ++在返回本地std :: stringstream时不使用RVO?

Sco*_*ger 4 c++ rvalue move-semantics rvo c++11

我已经阅读了很多关于rvalue和在C++> = 11中返回局部变量的信息.据我所知,"只是按值返回,不要使用move/forward而不添加&&方法签名,编译器将优化它适合你".

好的,我希望它发生:

#include <sstream>

std::stringstream GetStream() {
    std::stringstream s("test");
    return s;
}

auto main() -> int {
    auto s = GetStream();
}
Run Code Online (Sandbox Code Playgroud)

我很好

error: use of deleted function ‘std::basic_stringstream<char>::basic_stringstream(const std::basic_stringstream<char>&)’
     return s;
Run Code Online (Sandbox Code Playgroud)

错误.我不明白,为什么它会尝试复制构造函数?不应该使用移动构造函数和c ++ 11中的所有好东西吗?我用"--std = c ++ 14".

Sco*_*ger 8

好吧,这是我的gcc版本(4.9.3)中的一个错误.似乎已在> = 5中修复.https://gcc.gnu.org/bugzilla/show_bug.cgi?id = 54316