summaryrefslogtreecommitdiffstats
path: root/tests/ui/consts/const-typeid-of-rpass.rs
blob: 89d57ae4f98e628230080204c6555837816b828b (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
30
31
32
33
34
// run-pass
#![feature(const_type_id)]
#![feature(core_intrinsics)]

use std::any::TypeId;

struct A;

static ID_ISIZE: TypeId = TypeId::of::<isize>();

pub fn main() {
    assert_eq!(ID_ISIZE, TypeId::of::<isize>());

    // sanity test of TypeId
    const T: (TypeId, TypeId, TypeId) = (TypeId::of::<usize>(),
                     TypeId::of::<&'static str>(),
                     TypeId::of::<A>());
    let (d, e, f) = (TypeId::of::<usize>(), TypeId::of::<&'static str>(),
                     TypeId::of::<A>());

    assert!(T.0 != T.1);
    assert!(T.0 != T.2);
    assert!(T.1 != T.2);

    assert_eq!(T.0, d);
    assert_eq!(T.1, e);
    assert_eq!(T.2, f);

    // Check fn pointer against collisions
    const F: (TypeId, TypeId) = (TypeId::of::<fn(fn(A) -> A) -> A>(),
            TypeId::of::<fn(fn() -> A, A) -> A>());

    assert!(F.0 != F.1);
}