Я пытаюсь получить первый фактический параметр, отправленный в макрос с переменным числом аргументов.Это то, что я пробовал, и что не работает в VS2010:
#define FIRST_ARG(N, ...) N
#define MY_MACRO(...) decltype(FIRST_ARG(__VA_ARGS__))
Когда я смотрю на вывод препроцессора, я вижу, что FIRST_ARG
возвращает весь список аргументов, отправленный на MY_MACRO
...
С другой стороны, когда я пытаюсь использовать:
FIRST_ARG(1,2,3)
, он расширяется до 1, как и предполагалось.
Это, кажется, как-то противоположно проблеме, решаемой печально известнойдвухуровневые конкатные макросы.Я знаю, что «параметры макроса полностью раскрываются перед вставкой в тело макроса», но мне это здесь не поможет, поскольку я не понимаю, что это означает в контексте ... и __VA_ARGS__
Очевидно, __VA_ARGS__
связывается с N
и оценивается только позже.Я пробовал несколько способов с дополнительными макроуровнями, но это не помогло.