Es por el modo de apertura, debe ser in|out.
Código C++:
Ver originalstd::ofstream ostr (path); //Sobreescribe el archivo original caso existir, similar a al modo "W" de C
std::ofstream ostr (path, std::ofstream::out|std::ofstream::trunc ); //Equivale al modo anterior porem de forma implicita, similar a al modo "W" de C
std::ofstream ostr (path, std::ofstream::in|std::ofstream::out ); //Altera datos al fichero existente, lo hace al principio,, similar a al modo "r+" de C. Bueno si lo que quieres es moverte pelo fichero con seekg o seekp.
std::ofstream ostr (path, std::ofstream::in|std::ofstream::out|std::ofstream::app ); //Altera datos al fichero existente, los nuevos datos seran adicionados al final, similar a al modo "a" de C. De poca ayuda si lo que quieres es alterar datos en el fichero ya que no permite usar seekp o seekg, pues los datos siempre seran inseridos al final del fichero, mismo que intentes mover el puntero, los datos iran a parar al final del archivo.