| // Test that specializing on the well-formed predicates of the trait and | |
| // self-type of an impl is allowed. | |
| //@ check-pass | |
| #![feature(min_specialization)] | |
| struct OrdOnly<T: Ord>(T); | |
| trait SpecTrait<U> { | |
| fn f(); | |
| } | |
| impl<T, U> SpecTrait<U> for T { | |
| default fn f() {} | |
| } | |
| impl<T: Ord> SpecTrait<()> for OrdOnly<T> { | |
| fn f() {} | |
| } | |
| impl<T: Ord> SpecTrait<OrdOnly<T>> for () { | |
| fn f() {} | |
| } | |
| impl<T: Ord, U: Ord, V: Ord> SpecTrait<(OrdOnly<T>, OrdOnly<U>)> for &[OrdOnly<V>] { | |
| fn f() {} | |
| } | |
| fn main() {} |