12

次の単純なクラスがあります。

class Source
{
public:
    Source() = default;
    Source(Source const&) = delete;
    Source(Source&&) = default;

    explicit Source(std::string const& fileName)
     : inputStream(fileName), path_(fileName)
    {}

    ~Source() = default;

    auto path() const -> std::string
    {
        return this->path_;
    }

    std::ifstream inputStream;
private:
    std::string path_;
};

auto main(int argc, char* argv[]) -> int
{
    Source source(Source("test.txt"));
    cout << source.path() << "\n";

    return 0;
}

cppreference によるとifstreammoveコンストラクターがありますが、それを でコンパイルしようとするとMinGW 4.7.2、次のエラーが発生します。

..\src\main.cpp:32:46: エラー: 削除された関数の使用 'cy::Source::Source(cy::Source&&)' In file included from ..\src\main.cpp:10:0 : source.hpp:28:5: 注: 'cy::Source::Source(cy::Source&&)' は暗黙的に削除されます。これは、デフォルトの定義が不適切な形式になるためです: source.hpp:28:5: エラー: 使用削除された関数 'std::basic_ifstream::basic_ifstream(const std::basic_ifstream&)' c:\mingw\bin../lib/gcc/mingw32/4.7.2/include/c++/fstream:420:11: 注意: 'std::basic_ifstream::basic_ifstream(const std::basic_ifstream&)' は暗黙的に削除されます。これは、デフォルトの定義が不適切な形式になるためです: c:\mingw\bin../lib/gcc/mingw32/4.7.2/include/ c++/fstream:420:11: エラー: 削除された関数 'std::basic_istream::basic_istream(const std::basic_istream&)' の使用

私は何か間違ったことをしていますか?または、cppreference のドキュメントが不正確ですか? それとも GCC 4.7.2 にバグがありますか?

4

2 に答える 2

12

GCCの標準ライブラリ実装は、ストリームクラスの移動およびスワップ操作をまだ実装していないことがわかりました。gcc標準ライブラリのC++11機能の現在のステータスの詳細については、ここを参照してください。

情報とリンクを提供してくれたJesseGoodに感謝します。

于 2013-02-01T06:05:50.520 に答える