// checking ICE in canonical typing class A; template struct B { typedef A type; }; template class C : public B::type { } __attribute__ ((__may_alias__)); class A { operator const C &() { return *static_cast *> (this); } };