// This test is from #73976. We previously did not check if a type is monomorphized // before calculating its type id, which leads to the bizarre behaviour below that // TypeId of a generic type does not match itself. // // This test case should either run-pass or be rejected at compile time. // Currently we just disallow this usage and require pattern is monomorphic. #![feature(const_type_id)] #![feature(const_type_name)] use std::any::{self, TypeId}; pub struct GetTypeId(T); impl GetTypeId { pub const VALUE: TypeId = TypeId::of::(); } const fn check_type_id() -> bool { matches!(GetTypeId::::VALUE, GetTypeId::::VALUE) //~^ ERROR constant pattern depends on a generic parameter //~| ERROR constant pattern depends on a generic parameter } pub struct GetTypeNameLen(T); impl GetTypeNameLen { pub const VALUE: usize = any::type_name::().len(); } const fn check_type_name_len() -> bool { matches!(GetTypeNameLen::::VALUE, GetTypeNameLen::::VALUE) //~^ ERROR constant pattern depends on a generic parameter //~| ERROR constant pattern depends on a generic parameter } fn main() { assert!(check_type_id::()); assert!(check_type_name_len::()); }