Wenn man sich frühere Antworten auf SO ansieht, scheint es, dass während std::ostream
ist nicht beweglich, std::ofstream
sollte sein. Aber dieser Code
#include <fstream>
int main()
{
std::ofstream ofs;
std::ofstream ofs2{std::move(ofs)};
}
scheint in keiner Version von gcc oder clang zu kompilieren, die ich ausprobiert habe (entweder mit –std=c++11 oder –std=c++14). Der Compilerfehler variiert etwas, aber hier ist, was ich für gcc 4.9.0 bekomme
6 : error: use of deleted function 'std::basic_ofstream::basic_ofstream(const std::basic_ofstream&)'
Ist dies das erwartete Verhalten nach dem Standard?
Beachten Sie, dass zuvor eine sehr ähnliche Frage gestellt wurde ( Ist std::ostream verschiebbar? ), aber der Standard scheint sich seitdem geändert zu haben (wie in Warum kann std::ostream nicht verschoben werden? ), wodurch diese Antworten veraltet sind. Sicherlich erklärt keine dieser Antworten, warum der obige Code nicht kompiliert wird.
Ist auf dieses Problem gestoßen, als ich versucht habe, Container von . zu verwenden ofstream
, was aus den oben genannten Gründen nicht funktioniert.
kompiliert gut mit Clang 3.4.1 auf freebsd mit –std=c++11.
– jbruni
27. Februar ’15 um 23:04