| //@ 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 {} } |