New feature - rewriting the symbols during the AST traversal: #macro(a) name_@{typeof a}(); ... macro(x);
would call `name_int` if `x` has type int, or `name_int_ptr`.
not exactly C++/Java generics, result is rather similar, while the implementation is completely exposed to the user.
AFAIK, C99 doesn't use the @ character, so it can be used freely. The `$` is a bit more tricky, since both assemblers and C++ use it for different purposes, therefore it have to be passed to the C99 compiler unchanged, as part a symbol.