Мне очень-очень странно, что в документах VC++ говорится: (по адресу: http://msdn.microsoft.com/en-us/library/tzf8k3z8(VS.90).aspx)
"Объекты типа basic_filebuf создаются с внутренним буфером типа char * независимо от типа char_type, указанного параметром типа Elem. Это означает, что строка Unicode (содержащая символы wchar_t) будет преобразована в строку ANSI (содержащую символы char) перед он записывается во внутренний буфер. Чтобы хранить строки Unicode в буфере, создайте новый буфер типа wchar_t и установите его с помощью метода basic_streambuf::pubsetbuf(). Пример, демонстрирующий такое поведение, см. ниже».
Почему?