【发布时间】:2013-06-09 23:41:26
【问题描述】:
以下示例程序不能为我编译 clang 3.1 或 gcc 4.8:
#include <fstream>
#include <vector>
using namespace std;
int main()
{
vector<ifstream> bla;
bla.emplace_back("filename");
return 0;
}
但是,我认为 emplace_back 应该
"在向量的末尾插入一个新元素,紧随其后 当前最后一个元素。这个新元素是使用 args 作为其构造的参数。”
有谁知道为什么这不能编译?是我理解错了还是库实现还没有完成?
【问题讨论】:
-
我不懂 C++,但你是否根据你的包含来判断你在 vector
处有错字。你的意思是矢量 ?如果我错了,请纠正我。 -
std::vector的元素必须是可复制的,fstreams 不是。 -
ifstream是在fstream包含中定义的有效类型。 -
我尝试将您的
emplace_back()更改为push_back(std::move(foo)),而 GCC 4.7.3 给了我一个内部编译器错误并崩溃了。耶。 -
answer 提到在某些版本的 gcc 中,流类没有实现移动和交换操作。也许您的版本缺少支持?