VS2013 and Unicode literals give warnings

What is wrong with this code:

static const std::vector<wchar_t> glyphs(
    {L'A', L'B', L'C', L'D', L'E', L'F', L'G', L'H',
     L'I', L'J', L'K', L'L', L'M', L'N', L'O', L'P',
     L'Q', L'R', L'S', L'T', L'U', L'V', L'W', L'X',
     L'Y', L'Z', L' ', L'Ä', L'Ö', L'Ü', L'Å', L' ',
     L'a', L'b', L'c', L'd', L'e', L'f', L'g', L'h',
     L'i', L'j', L'k', L'l', L'm', L'n', L'o', L'p',
     L'q', L'r', L's', L't', L'u', L'v', L'w', L'x',
     L'y', L'z', L' ', L'ä', L'ö', L'ü', L'å', L'"',
     L'0', L'1', L'2', L'3', L'4', L'5', L'6', L'7',
     L'8', L'9', L'!', L'"',L'#', L'$', L'%', L'&',
     L' ', L'(', L')', L'*', L'+', L',', L'-', L'.',
     L'/', L':', L';', L'<', L'=', L'>', L'?', L' ',
     L'Â', L'À', L'É', L'È', L'Ê', L'Ë', L'Î', L'Ï',
     L'Ô', L'Û', L'Ç', L'â', L'à', L'é', L'è', L'ê',
     L'ë', L'î', L'ï', L'ô', L'û', L'ç', L''',L' '});

Exactly the same piece of code compiles without warnings and works with GCC and Clang, but with VS2013 I get:

warning: C4066: characters beyond first in wide-character constant ignored

..for lines that start with glyphs ‘y’, ‘Y’, ‘Â’, ‘Ô’ and ‘ë’.

Answer

There’s only one way I can repro this, saving the text to a file encoded in utf8 without a BOM. The compiler will guess at the system default codepage and trip over the double bytes in the utf8 codes produced by the accented characters.

In VS, use File + Save As, click on the arrow on the Save button and select “Save with Encoding”. Pick “Unicode (UTF-8 with signature) – Codepage 65001” from the list.

Leave a Reply

Your email address will not be published. Required fields are marked *