Глядя на предыдущие ответы на SO, кажется, что, хотя std::ostream
не является подвижным, std::ofstream
должен быть. Однако этот код
#include <fstream>
int main()
{
std::ofstream ofs;
std::ofstream ofs2{std::move(ofs)};
}
похоже, не компилируется ни в одной из версий gcc или clang, которые я пробовал (с -std = С++ 11 или -std = С++ 14). Ошибка компилятора несколько отличается, но вот то, что я получаю для gcc 4.9.0
6 : error: use of deleted function 'std::basic_ofstream::basic_ofstream(const std::basic_ofstream&)'
Является ли это ожидаемым поведением в соответствии со стандартом?
Обратите внимание, что ранее был задан очень похожий вопрос (Is std:: ofstream movable?), но кажется, что стандарт изменился с тех пор (как подробно описано в Почему нельзя переместить std:: ostream?), чтобы эти ответы устарели. Конечно, ни один из этих ответов не объясняет, почему приведенный выше код не компилируется.
Произошла ошибка при попытке использовать контейнеры ofstream
, которые не работают из-за вышеперечисленного.