Pues porque escribes por el flujo ANSI en lugar de Unicode. Utiliza las versiones wide char para ello. Por ejemplo, en lugar de
std::cout << "Fernando Gómez" << endl;
que te aparecería con la o como caracter raro, emplea:
std::wcout << L"Fernando Gómez" << endl;
Y así sucesivamente. Casi todas las clases que emplean wchar_t en lugar de char tienen una "w" al principio o al final. Por ejemplo, std::wstring es la contraparte de std::string, usualmente definidas como
typedef basic_string<char> string;
typedef basic_string<wchar_t> wstring;
Saludos.