mirror of https://github.com/rust-lang/rust
35 lines
863 B
Rust
35 lines
863 B
Rust
//@ 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);
|
|
}
|