15

次のサンプル プログラムは、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 を使用してその場で構築されます。」

なぜこれがコンパイルされないのか誰かが知っていますか? 私が誤解したのか、それともライブラリの実装がまだ完了していないのでしょうか?

4

3 に答える 3

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

于 2013-06-13T14:40:21.403 に答える
7

これは の実装のバグですstd::basic_istream。移動できるはずですが、そうではありません。ベクトルに格納できるのは可動型のみです。

これは GCC に対するバグレポートです。

于 2013-06-13T14:41:03.737 に答える