I found it surprising or unintuitive that the !() is required, and I do want to know what is the reasoning behind it
I don't know whether the language could be changed to support code like:
struct Foo(){}
Foo foo;
but doing that certainly would introduce some ambiguities. For
example, consider this line:
alias Foo Bar; Should Bar be a template or an instance of a template here?
