That is an artificial restriction if C. Also see how ! In Rust is also loosing it's artificial restrictions.
Indeed, and there has been some talk of removing this restriction in C++ because it makes certain kinds of metaprogramming a lot more cumbersome than they should be.
Yes, and () isn't void; the poster above me is wrong. Void is...the absence of a type? It's awkward.