That may not count as a correct Rust compiler though, I'm not 100% sure how that's defined, or if it is.
A is of type T <=> B is not of type T
B is of type T <=> A is not of type T
Where <=> is if and only if.In which case it is paradoxical to say that A is of type T. But also paradoxical to say that A is not of type T.
That said, it's not clear to me what part of "you can write uninstantiable templates" is surprising, so I'm probably not understanding correctly. Maybe you could find the C++ code you're talking about? I would be interested.
That's surprising, the C preprocessor is pretty crippled. It's creator intentionally made it so people won't abuse it to create full blown mini languages.
Did you get things mixed up or is there actually a way the c preprocessor can be turing-complete ?
If nothing else, it does demonstrate that you can do a lot more in the preprocessor than you might think, and this is at least a significant subset of what true MP macros are used for in Lisp most of the time. Except much gnarlier...