It's not correct usage of `checkAliasThisRec()`. Consider this test case:

```d
class C1 { T1!C2 c; alias c this; }
class C2 { C1 c; alias c this; }
struct T1(C)
{
    C c;
    alias c this;
}
static assert(is(C1 : T1!C, C) && is(C == C2));
```

`C1` has cyclic `alias this` graph (`C1` -> `T1!C2` -> `C2` -> `C1`), So, `C1`->checkAliasThisRec() returns true.
But, compiler should trace the graph till reaching to the start point `C1`.

To store the tracing status of cycle, `TypeClass` and `TypeStruct` have the field `AliasThisRec att;`. Please use it with reference to (`TypeStruct`|`TypeClass`)`::implicitConvTo`.