| //@ compile-flags:-Z unstable-options --show-coverage | |
| //@ check-pass | |
| #![feature(trait_alias)] | |
| #![feature(type_alias_impl_trait)] | |
| /// look at this trait right here | |
| pub trait ThisTrait { | |
| /// that's a trait all right | |
| fn right_here(&self); | |
| /// even the provided functions show up as trait methods | |
| fn aww_yeah(&self) {} | |
| /// gotta check those associated types, they're slippery | |
| type SomeType; | |
| } | |
| /// so what happens if we take some struct... | |
| #[derive(Clone)] | |
| pub struct SomeStruct; | |
| /// ...and slap this trait on it? | |
| impl ThisTrait for SomeStruct { | |
| /// nothing! trait impls are totally ignored in this calculation, sorry. | |
| fn right_here(&self) {} | |
| type SomeType = String; | |
| } | |
| /// but what about those aliases? i hear they're pretty exotic | |
| pub trait MyAlias = ThisTrait + Send + Sync; | |
| /// woah, getting all opaque in here | |
| pub type ThisExists = impl ThisTrait; | |
| /// why don't we get a little more concrete | |
| pub fn defines() -> ThisExists { SomeStruct {} } |