Рассмотрим следующий пример кода.
#define T(q) L##q
#define A(p) T("x" T(#p))
wchar_t w[] = A(a);
Правильно ли сформирован этот код? Каково значение w
? Отличается ли поведение C и C ++? Отличается ли он в C ++ 0x?
Я просмотрел стандарт C ++ 03, и мне кажется, что код должен быть действительным с w
, имеющим значение L «xa»
.
A
, его обработка дает последовательность pp T («x» T («a»))
. T
, что дает L ## "x" T ("a")
, что, в свою очередь, дает L "x" T ("a")
. T
, давая L "x" L "a"
. Это верно? Ни EDG, ни Clang не принимают этот фрагмент, MSVC 9 прекрасно его компилирует.