The main argument that I see for preference for function macros is that they are not available as first-class functions at runtime, which limits your flexibility when using various powerful functional programming methods.
Personally, I believe that macros are still an extremely useful software tool that allows you to use them appropriately, that is, you can perform complex code transformations at compile time, which would otherwise be costly or require a lot of unnecessary template.
source share