Это не разрешено в соответствии со стандартом ISO. Это ошибка в продукте Microsoft. Даже на их странице , описывающей эту особенность , ничего не говорится об этом аберрантном (или отвратительном, в зависимости от вашей точки зрения) поведении.
Определение символьного литерала (взято из 2.14.3
C ++ 0x, но соответствующий бит не отличается от C ++ 03) содержит:
character-literal:
L’ c-char-sequence ’
c-char-sequence:
c-char
c-char-sequence c-char
c-char:
any member of the source character set except
the single-quote ’, backslash \, or new-line character
escape-sequence
universal-character-name
escape-sequence:
simple-escape-sequence
octal-escape-sequence
hexadecimal-escape-sequence
simple-escape-sequence: one of
\’ \" \? \\ \a \b \f \n \r \t \v
octal-escape-sequence:
\ octal-digit
\ octal-digit octal-digit
\ octal-digit octal-digit octal-digit
hexadecimal-escape-sequence:
\x hexadecimal-digit
hexadecimal-escape-sequence hexadecimal-digit
Как вы можете видеть, существует нет способа, которым вы можете ничего не получить между '
символами в L'x'
. Это должен быть один или несколько символов c_char
. Фактически, это ясно указано в следующем параграфе (мой акцент):
Символьный литерал представляет собой один или несколько символов, заключенных в одинарные кавычки, как в ’x’
, необязательно с предшествующей одной из букв u
, U
или L
, например u’y’
, U’z’
или L’x’
соответственно.