Очевидно, что потоки не могут быть скопированы. Должно быть возможно перемещать потоки. В соответствии с пунктом 4 раздела 27.9.1.11 [ofstream.cons] можно переместить конструкцию a std::ofstream (то же самое верно для std::ifstream, std::fstream и вариантов std::*stringstream). Например:
#include <iostream>
#include <fstream>
#include <string>
std::ofstream makeStream(std::string const& name) {
    return std::ofstream(name);
}
int main()
{
    std::ofstream out{ makeStream("example.log") };
}
Попытка переместить std::ostream, например, чтобы иметь функцию factory, создающую std::ofstream, std::ostringstream или какой-либо другой поток в соответствии с протоколом URN, переданным как аргумент, не работает. std::ostream (ну, действительно, шаблон класса std::basic_ostream) имеет конструктор перемещения protected в соответствии с 27.7.3.1 [ostream].
Почему нельзя std::ostream перемещаться самостоятельно?