[−][src]Crate type_equals
A trait for checking type equality.
This crate implements the TypeEquals trick described in rust-lang/rust#20041.
The following compiles:
use type_equals::TypeEquals; pub trait Owner { type Child1: Child; type Child2: Child; } pub trait Child { type Owner: Owner; } pub struct A; impl Owner for A { type Child1 = B; type Child2 = C; } pub struct B; impl Child for B { type Owner = A; } pub struct C; impl Child for C { type Owner = A; } pub fn want_child_one<T: Child>() where <T::Owner as Owner>::Child1: TypeEquals<Other = T>, {} pub fn want_child_two<T: Child>() where <T::Owner as Owner>::Child2: TypeEquals<Other = T>, {} pub fn this_works() { want_child_one::<B>(); want_child_two::<C>(); }
Meanwhile, the following does not compile:
ⓘThis example deliberately fails to compile
// A, B, C, want_child_one and want_child_two are declared identically. pub fn this_does_not_work() { want_child_one::<C>(); want_child_two::<B>(); }
Traits
TypeEquals |