#![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::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::Proj) {} pub struct Parametrized(T); impl Parametrized { pub type Proj = (); } impl Parametrized { pub type Proj = String; }