* macros cannot be enclosed into scopes. Or at least, doing so is cumbersome and error-prone as in that case, the macro needs to be defined and undefined manually.
* macros are handled by the preprocessor and are not understood from the compiler. They can easily pollute the code in places where types are not expected. ``++typedef++`` and ``++using++`` are known to the compiler to define types and can be more strictly checked.