| #![feature(inherent_associated_types)] |
| #![allow(incomplete_features)] |
| |
| //@ has 'inherent_projections/fn.create.html' |
| //@ has - '//pre[@class="rust item-decl"]' "create() -> Owner::Metadata" |
| //@ has - '//pre[@class="rust item-decl"]//a[@class="associatedtype"]/@href' 'struct.Owner.html#associatedtype.Metadata' |
| pub fn create() -> Owner::Metadata {} |
| |
| pub struct Owner; |
| |
| impl Owner { |
| pub type Metadata = (); |
| } |
| |
| // Make sure we handle bound vars correctly. |
| //@ has 'inherent_projections/fn.user.html' '//pre[@class="rust item-decl"]' "user(_: for<'a> fn(_: Carrier<'a>::Focus))" |
| pub fn user(_: for<'a> fn(Carrier<'a>::Focus)) {} |
| |
| pub struct Carrier<'a>(&'a ()); |
| |
| impl<'a> Carrier<'a> { |
| pub type Focus = &'a mut i32; |
| } |
| |
| //////////////////////////////////////// |
| |
| // FIXME(inherent_associated_types): Below we link to `Proj` but we should link to `Proj-1`. |
| // The current test checks for the buggy behavior for demonstration purposes. |
| |
| //@ has 'inherent_projections/fn.test.html' |
| //@ has - '//pre[@class="rust item-decl"]' "test(_: Parametrized<i32>::Proj)" |
| //@ has - '//pre[@class="rust item-decl"]//a[@class="associatedtype"]/@href' 'struct.Parametrized.html#associatedtype.Proj' |
| //@ !has - '//pre[@class="rust item-decl"]//a[@class="associatedtype"]/@href' 'struct.Parametrized.html#associatedtype.Proj-1' |
| pub fn test(_: Parametrized<i32>::Proj) {} |
| |
| pub struct Parametrized<T>(T); |
| |
| impl Parametrized<bool> { |
| pub type Proj = (); |
| } |
| |
| impl Parametrized<i32> { |
| pub type Proj = String; |
| } |