File: const-typeid-of-rpass.rs

package info (click to toggle)
rustc 1.89.0%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 906,624 kB
  • sloc: xml: 158,148; python: 34,888; javascript: 19,595; sh: 19,221; ansic: 13,046; cpp: 7,144; asm: 4,376; makefile: 692; lisp: 174; sql: 15
file content (34 lines) | stat: -rw-r--r-- 863 bytes parent folder | download | duplicates (15)
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);
}