C++ C++;11-移动包含filestream的对象

C++ C++;11-移动包含filestream的对象,c++,gcc,c++11,fstream,move-semantics,C++,Gcc,C++11,Fstream,Move Semantics,我有以下(简化的问题): 类流() { 标准::流mStr; 公众: Stream():mStr(“文件”,of Stream::out) {} 流(常量流和rhs)=删除; 流(流和右侧):mStr(移动(rhs.mStr)) {} void运算符()(字符串和数据) { mStr根据: 我无法移动fstream 这是libstdc++库中的一个已知问题。下面的代码可以用clang和libc++很好地编译: std::fstream f1, f2; f2 = std::move(f1);

我有以下(简化的问题):

类流()
{ 
标准::流mStr;
公众:
Stream():mStr(“文件”,of Stream::out)
{}
流(常量流和rhs)=删除;
流(流和右侧):mStr(移动(rhs.mStr))
{}
void运算符()(字符串和数据)
{
mStr根据:


我无法移动
fstream

这是
libstdc++
库中的一个已知问题。下面的代码可以用clang和
libc++
很好地编译:

std::fstream f1, f2;
f2 = std::move(f1);
但根据以下说明,使用libstdc++
失败:


我无法移动
fstream

这是
libstdc++
库中的一个已知问题。下面的代码可以用clang和
libc++
很好地编译:

std::fstream f1, f2;
f2 = std::move(f1);

但是使用libstdc++失败。作为一种解决方法,您可以使用lambda函数:

Stream s;
auto Logger = [&s] (std::string& data) {
    s(data);
};

for (std::string& data : DataList) {
    Logger(data);
}

作为解决方法,您可以使用lambda函数:

Stream s;
auto Logger = [&s] (std::string& data) {
    s(data);
};

for (std::string& data : DataList) {
    Logger(data);
}
std::fstream f1, f2;
f2 = std::move(f1);
Stream s;
auto Logger = [&s] (std::string& data) {
    s(data);
};

for (std::string& data : DataList) {
    Logger(data);
}