File: inherent-projections.rs

package info (click to toggle)
rustc 1.85.0%2Bdfsg3-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, sid, trixie
  • size: 893,396 kB
  • sloc: xml: 158,127; python: 35,830; javascript: 19,497; cpp: 19,002; sh: 17,245; ansic: 13,127; asm: 4,376; makefile: 1,051; perl: 29; lisp: 29; ruby: 19; sql: 11
file content (44 lines) | stat: -rw-r--r-- 1,495 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#![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;
}