Рассмотрим следующий пример кода.
#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 прекрасно его компилирует.