Compile-time asserts:
That's not the same, I mean something lick checking if a parameter is a string, or a symbol. That way you can generate meaningful error messages, or even handle them.
what is "macros with loops"? If you mean recursion,recursive macros
No, I mean something like while loops, not just counting down. The fundamental problem is that C != CPP, which is a pity, imo. But it's probably needed to keep the language from becoming too dangerous.