> static if (is(AliasThisTypeOf!T AT) && !is(AT[] == AT) || is(T AT))
>    alias C = OriginalType!AT;

Unfortunately it doesn't work. If AliasThisTypeOf!T succeeds but !is(AT[] == AT) fails, is(T AT) will declare the name `AT` again, and will cause conflict.

```d
struct S(T...) { T val; alias val this; }
alias T = S!(int);

static if (is(AliasThisTypeOf!T AT) && !is(AT[] == AT) || is(T AT))
    alias C = AT;

pragma(msg, C);
```

Prints:
```
Error: declaration AT is already defined
```

I know it is one of the corner case of current compiler implementation, and I think it should be fixed.