为什么我不能将ifstream放入向量中?

dge*_*gel 15 c++ c++11

在clang 3.1或gcc 4.8中,以下示例程序不能为我编译:

#include <fstream>
#include <vector>

using namespace std;

int main()
{
    vector<ifstream> bla;
    bla.emplace_back("filename");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,我认为emplace_back应该

"在向量的末尾插入一个新元素,紧跟在当前最后一个元素之后.这个新元素使用args作为其构造的参数来构造."

有谁知道为什么这不编译呢?我误解了或者图书馆的实施还没有完成吗?

Arn*_*sen 15

c ++ 11中的流是可移动的,所以理论上你应该能够做你想要的,问题是gcc/libstdc ++中还没有实现可移动流.

要进一步补充我的答案,请查看gcc/libstdc ++ c ++ 11状态:http: //gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011

特别是27.5,27.8,27.9


Mik*_*our 7

这是执行中的一个错误std::basic_istream.它应该是可移动的,但不是; 并且只有可移动类型可以存储在向量中.

这是针对GCC的错误报告.