The error is mixing std::cout
and std::wcout
:
27.4 Standard iostream objects [iostream.objects]
27.4.1 Overview [iostream.objects.overview]
3 Mixing operations on corresponding wide- and narrow-character streams follows the same semantics as
mixing such operations on FILEs, as specified in Amendment 1 of the ISO C standard.
7.21.2 Streams
4 Each stream has an orientation. After a stream is associated with an external file, but
before any operations are performed on it, the stream is without orientation. Once a wide
character input/output function has been applied to a stream without orientation, the
stream becomes a wide-oriented stream. Similarly, once a byte input/output function has
been applied to a stream without orientation, the stream becomes a byte-oriented stream.
Only a call to the freopen function or the fwide function can otherwise alter the
orientation of a stream. (A successful call to freopen removes any orientation.)267)
5 Byte input/output functions shall not be applied to a wide-oriented stream and wide
character input/output functions shall not be applied to a byte-oriented stream. [...]
See here for a better demonstration highlighting what goes wrong and what does not:
http://coliru.stacked-crooked.com/a/5c3a34c0c4523016