Я предполагаю, что это происходит внутри макроса препроцессора, иначе вопрос вообще не имеет смысла, например:
#define X(dialog_control_id) L"DLGCTRL_"L#dialog_control_id
, где предполагается, что X(foo)
расширяется до L"DLGCTRL_foo"
.
Код должен быть:
#define X(dialog_control_id) L"DLGCTRL_" #dialog_control_id
В исходном коде есть несколько проблем:
L#
не допускается в ISOC ++, это расширение препроцессора Microsoft для создания широкого строкового литерала. - В препроцессоре C ++ 11 буква сразу после закрывающей кавычки (без пробела между ними) маркируется как пользовательскаяопределенный строковый литерал.
- Последний
L
никогда не был необходим, так как широкий строковый литерал может быть объединен с узким строковым литералом (производящим широкий строковый литерал)