Проблема довольно проста: я просто не могу передать второе расширение макроса, он сообщает об ошибке на Visual Studio 2013 и 2015, но хорошо работает на GCC и Clang.Проблема с расширением препроцессора C++
#include <iostream>
#define KS_MACRO_TAIL(A, ...) __VA_ARGS__
#define KS_MACRO_DELAY(M, ...) M(__VA_ARGS__)
int main()
{
int XX = 1;
std::cout << KS_MACRO_TAIL (_, XX) << std::endl;
std::cout << KS_MACRO_DELAY (KS_MACRO_TAIL, _, XX);
}
Visual Studio генерирует следующий эквивалент:
int main()
{
int XX = 1;
std::cout << XX << std::endl;
std::cout << ;
}
Где std::cout << ;
ошибка синтаксиса, но приведенное выше утверждение верно.
Что ошибка сообщается? –
Работает отлично с 'gcc -E' на gcc 5.4.0 (обе строки расширяются до' XX'), поэтому предположительно VS-специфические. Ошибка компилятора будет зависеть от контекста, в котором вы используете макрос, поэтому, пожалуйста, [отредактируйте свой вопрос] (https://stackoverflow.com/posts/38975545/edit), чтобы показать, как используется KS_MACRO_DELAY', и, как сказал @ScottHunter, точно, о чем сообщается ошибка. – cxw