Then, I think it can be expressed with following rules: Type `T` is equal to type `S` if:
1. None of `T` and `S` is object, enumeration, concept, pointer-to-object, reference-to-object, or a distinct or generic type, while `T` is structurally equivalent to `S`. 2. `T` is object, enumeration, pointer-to-object, reference-to-object, or a distinct or generic type and is declared in the form, or any equivalent form of, `type T = S`, where `S` is not the keyword `object`, the keyword `enum`, the keyword `distinct`, the phrase `ptr object`, or the phrase `ref object`. 3. `T` is object, enumeration, pointer-to-object, reference-to-object, or a distinct or generic type, and is declared in the form, or any equivalent form of, `type T = U`, where `U`, by rule 2, is a type equal to `S`.
