And I would argue that a Macro is external language put on top of your language as a patch (hack), when your language is not expressive enough for genericity.
Then yes, there is nothing as "proper" Macro. There is just an attempt to fix a limited language in the first place.
And it is something that C++ arrived to solve ( not that badly ) currently.