c – std :: ofstream是否可移动?

我在MSVC10中有这个编译好的地图:
std::map<std::string,std::ofstream> m_logFiles;

但是在ubuntu使用g 4.5与C 0x启用,我得到以下错误信息:

/usr/include / c /4.5/bits/ios_base.h|785|error:’std :: ios_base :: ios_base(const std :: ios_base&)’是私有的

通过使用指针而不是对象,我解决了这个问题.
在网络上搜索,我了解到流并不意味着被复制(为什么被很好的解释).但我的问题是,std :: ofstream是一种可移动类型?如果是,是不是允许它作为标准容器中的模板参数使用?
如果是的话,那么在这一点上,MSVC10背后是g? (这将解释为什么它在MSVC上工作).我知道编译器作者要完全实施甚至不是最终的东西,这是很愚蠢的,但我对未来很好奇.

使用g 4.6.1没有帮助.

编辑:阅读评论我进一步挖了一下,发现插入是导致问题,而不是映射的声明.

阅读Cubbi的链接我试过以下:

#include <string>
#include <fstream>
#include <map>

using namespace std;

int main()
{
    map<string,ofstream> m_logFiles;
    ofstream st;
    m_logFiles.insert(make_pair<string,ofstream>(string("a"),move(st)));
    return 0;
}

但还是没有运气. g抱怨使用b删除的复制构造函数.

解决方法

std :: ofstream是可移动的.这个程序使用clang / libc为我编译:
#include <string>
#include <fstream>
#include <map>

int main()
{
    std::map<std::string,std::ofstream> m_logFiles;
}

参考文献27.9.1.11 [ofstream.cons].

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...