File: const-typeid-of-rpass.rs

package info (click to toggle)
rustc-web 1.70.0%2Bdfsg1-7~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,517,036 kB
  • sloc: xml: 147,962; javascript: 10,210; sh: 8,590; python: 8,220; ansic: 5,901; cpp: 4,635; makefile: 4,006; asm: 2,856
file content (34 lines) | stat: -rw-r--r-- 862 bytes parent folder | download | duplicates (9)
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);
}