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