//@ known-bug: rust-lang/rust#126944 // Step 1: Create two names for a single type: `Thing` and `AlsoThing` struct Thing; struct Dummy; pub trait DummyTrait { type DummyType; } impl DummyTrait for Dummy { type DummyType = Thing; } type AlsoThing = ::DummyType; // Step 2: Create names for a single trait object type: `TraitObject` and `AlsoTraitObject` pub trait SomeTrait { type Item; } type TraitObject = dyn SomeTrait; type AlsoTraitObject = dyn SomeTrait; // Step 3: Force the compiler to check whether the two names are the same type pub trait Supertrait { type Foo; } pub trait Subtrait: Supertrait {} pub trait HasOutput { type Output; } fn foo() -> F::Output where F: HasOutput>, { todo!() }