summaryrefslogtreecommitdiffstats
path: root/src/test/ui/traits/pointee-tail-is-generic.rs
blob: e0da0fc38613d8a17c89fbcfa0f9d9bfa72aa556 (plain)
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
// check-pass
// edition:2018

#![feature(ptr_metadata)]
#![feature(type_alias_impl_trait)]

type Opaque = impl std::future::Future;

fn opaque() -> Opaque {
    async {}
}

fn a<T>() {
    // type parameter T is known to be sized
    is_thin::<T>();
    // tail of ADT (which is a type param) is known to be sized
    is_thin::<std::cell::Cell<T>>();
    // opaque type is known to be sized
    is_thin::<Opaque>();
}

fn a2<T: Iterator>() {
    // associated type is known to be sized
    is_thin::<T::Item>();
}

fn is_thin<T: std::ptr::Pointee<Metadata = ()>>() {}

fn main() {}