Здравствуйте, rg45, Вы писали:
R> Для макросов не предусмотрено ничего похожего на отложенное (неявное) инстанцирование, которое очень востребовано при использовании шаблонов.
В смысле? Макросы как раз и дают результат в месте вызова, отлженно.
R> Для макросов недоступно огромное количество инструментов и паттернов, доступных для шаблонов — концепты, SFINAE, CRTP, variadic packs, template class argument deduction и пр.
Смешаны совершенно разные концепции. SFINAЕ -- краеугольный камень, на котором всё стоит. Остальное всё
постольку-поскольку. Переменное число аргументов есть и у макросов.
R> Макросы небезопасны в плане скрытых побочных эффектов (классический пример — max(++a, ++b))
std::max неожиданно тоже опасен! В него можно подсунуть временнй объект.
R> Макросы существенно проблематичнее в отладке и поиске ошибок, чем шаблоны.
Притянуто за уши. То и другое по шагам не шагается в отладчике, то и другое компиляторы умеют разворачивать
по шагам когда показывают ошибку.