Использование запятых внутри макроса без скобок: как я могу смешивать и сочетать с шаблоном?

Рассмотрим простой макрос:

#define ECHO(x) x

ECHO(foo(1, 2))

Это дает точный результат, который мы ожидаем:

foo(1, 2)

Приведенный выше пример работает, потому что скобки рядом с вызовом функции распознаются препроцессором.

Теперь подумайте, что произойдет, если я использую шаблон вместо вызова функции:

ECHO(template<int, bool>)

Это вызывает ошибку, потому что препроцессор интерпретирует template и bool> как два отдельных аргумента макроса. Препроцессор не распознает <> для области видимости!

Можно ли вообще использовать такой шаблон в макросе?

8
задан chrisaycock 23 February 2012 в 16:02
поделиться