"Любая достаточно сложная программа на Си или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Lisp". Так что макросы нужны.
Попробуйте "заинлайнить" вот это:
#define FOO_MAGIC protected: foo someMagicFunction(){...} foo Bar;
// далее - мешанина из \ template typedef typename { } <> () FOO_MAGIC_1
// и прочих радостей поддержки чужого кода
Более известный
пример
В бусте тоже есть полезные
макросы, особенно в сочетании с другой чёрной
магией