`TypeXXX::semantic()` is always called at a context where type is really required. So it must return a type.

```d
typeof(exp) var = 1;  // typeof(exp) must be a type.
typeof(exp).ident1!(B).ident2 var = 1;  // typeof(exp).ident1!(B).ident2 must be a type.
```

On the other hand, at a context where the requirement is depend on the actual argument (e.g. template argument position), `TypeXXX::resolve` is used.

```d
alias SomeTemplate!(typeof(exp)) A1;  // in basic, typeof(exp) is a type.
alias SomeTemplate!(typeof(exp).ident1!(B).ident2) A1;
// typeof(exp)..ident1!(B).ident2 might be a type, dsymbol, or an expression.
// It is depends on the SomeTemplate definition.
```

Therefore in here, the result of `TypeTypeof::resolve` must be a type. Otherwise, compiler should report an error.