У меня есть следующий простой класс:
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 ifstream
имеет конструктор move
, но когда я пытаюсь скомпилировать его с помощью MinGW 4.7.2
, я получаю следующую ошибку:
..\src\main.cpp: 32: 46: ошибка: использование удаленной функции 'cy:: Source:: Source (cy:: Source &)' В файле, включенном в.. \src\main.cpp: 10: 0: source.hpp: 28: 5: note: 'cy:: Source:: Source (cy:: Source &)' неявно удаляется, поскольку определение по умолчанию будет плохо сформировано: source.hpp: 28: 5: ошибка: использование удаленная функция 'std:: basic_ifstream:: basic_ifstream (const станд:: basic_ifstream &) "C:\MinGW\бен../Library/GCC/mingw32/4.7.2/включить/С++/fstream: 420: 11: note: 'std:: basic_ifstream:: basic_ifstream (const std:: basic_ifstream &) 'неявно удаляется, поскольку значение по умолчанию определение будет плохо сформировано: C:\MinGW\бен../Library/GCC/mingw32/4.7.2/включить/С++/fstream: 420: 11: Ошибка: использование удаленной функции" Станд:: basic_istream:: basic_istream (Const станд:: basic_istream &)
Я что-то делаю неправильно? Или документация cppreference неточна? Или у GCC 4.7.2 есть ошибка?