Использование запятых внутри макроса без круглых скобок: как смешать и сопоставить шаблон?
Рассмотрим простой макрос:
#define ECHO(x) x
ECHO(foo(1, 2))
Это дает точный результат, который мы ожидаем:
foo(1, 2)
Приведенный выше пример работает, потому что скобки рядом с вызовом функции распознаются препроцессором.
Теперь рассмотрим, что произойдет, если я использую шаблон вместо функции, вызову:
ECHO(template<int, bool>)
Это вызывает ошибку, потому что препроцессор интерпретируетtemplate<int
иbool>
как два отдельных аргумента к макросу. Препроцессор не распознает<>
для сферы!
Есть ли способ использовать такой шаблон в макросе?