comportamento estranho do fluxo de

Eu me deparei com um comportamento estranho da corrente, pelo menos estranho para mim. Aqui está o meu programa, eu estou usando o Visual Studio 2010 Express Edition.

int main () {

    std::ofstream file("file.txt");
    file << "something1";
    file.close();

    file.open("file.txt", std::ios::ate | std::ios::in );
    file << "something2";
    file.close();

    return 0;
}

Isso produz a saída correta.

algo1something2

Agora, se eu substituir a 9ª linha pelo seguinte código,

file.open("file.txt", std::ios::ate);

Eu recebo esta saída.

algo2

Mas se eu substituir a 9ª linha novamente, desta vez com este código,

file.open("file.txt", std::ios::ate | std::ios::in );

Eu recebo esta saída.

algo1something2

Agora, eu acho que a questão é, alguém poderia me ajudar fazer algum sentido disso? Por que a última solução funciona, mas a do meio não funciona?

EDITAR: Corrigida a função principal. Você aprende algo todo dia.

questionAnswers(1)

yourAnswerToTheQuestion