File tree 4 files changed +77
-15
lines changed
4 files changed +77
-15
lines changed Original file line number Diff line number Diff line change
1
+ // check-pass
2
+ //
3
+ // This test is complement to the test in issue-73976-polymorphic.rs.
4
+ // In that test we ensure that polymorphic use of type_id and type_name in patterns
5
+ // will be properly rejected. This test will ensure that monomorphic use of these
6
+ // would not be wrongly rejected in patterns.
7
+
8
+ #![ feature( const_type_id) ]
9
+ #![ feature( const_type_name) ]
10
+
11
+ use std:: any:: { self , TypeId } ;
12
+
13
+ pub struct GetTypeId < T > ( T ) ;
14
+
15
+ impl < T : ' static > GetTypeId < T > {
16
+ pub const VALUE : TypeId = TypeId :: of :: < T > ( ) ;
17
+ }
18
+
19
+ const fn check_type_id < T : ' static > ( ) -> bool {
20
+ matches ! ( GetTypeId :: <T >:: VALUE , GetTypeId :: <usize >:: VALUE )
21
+ }
22
+
23
+ pub struct GetTypeNameLen < T > ( T ) ;
24
+
25
+ impl < T : ' static > GetTypeNameLen < T > {
26
+ pub const VALUE : usize = any:: type_name :: < T > ( ) . len ( ) ;
27
+ }
28
+
29
+ const fn check_type_name_len < T : ' static > ( ) -> bool {
30
+ matches ! ( GetTypeNameLen :: <T >:: VALUE , GetTypeNameLen :: <usize >:: VALUE )
31
+ }
32
+
33
+ fn main ( ) {
34
+ assert ! ( check_type_id:: <usize >( ) ) ;
35
+ assert ! ( check_type_name_len:: <usize >( ) ) ;
36
+ }
Original file line number Diff line number Diff line change 6
6
// Currently we just disallow this usage and require pattern is monomorphic.
7
7
8
8
#![ feature( const_type_id) ]
9
+ #![ feature( const_type_name) ]
9
10
10
- use std:: any:: TypeId ;
11
+ use std:: any:: { self , TypeId } ;
11
12
12
13
pub struct GetTypeId < T > ( T ) ;
13
14
@@ -21,6 +22,19 @@ const fn check_type_id<T: 'static>() -> bool {
21
22
//~| ERROR could not evaluate constant pattern
22
23
}
23
24
25
+ pub struct GetTypeNameLen < T > ( T ) ;
26
+
27
+ impl < T : ' static > GetTypeNameLen < T > {
28
+ pub const VALUE : usize = any:: type_name :: < T > ( ) . len ( ) ;
29
+ }
30
+
31
+ const fn check_type_name_len < T : ' static > ( ) -> bool {
32
+ matches ! ( GetTypeNameLen :: <T >:: VALUE , GetTypeNameLen :: <T >:: VALUE )
33
+ //~^ ERROR could not evaluate constant pattern
34
+ //~| ERROR could not evaluate constant pattern
35
+ }
36
+
24
37
fn main ( ) {
25
38
assert ! ( check_type_id:: <usize >( ) ) ;
39
+ assert ! ( check_type_name_len:: <usize >( ) ) ;
26
40
}
Original file line number Diff line number Diff line change
1
+ error: could not evaluate constant pattern
2
+ --> $DIR/issue-73976-polymorphic.rs:20:37
3
+ |
4
+ LL | matches!(GetTypeId::<T>::VALUE, GetTypeId::<T>::VALUE)
5
+ | ^^^^^^^^^^^^^^^^^^^^^
6
+
7
+ error: could not evaluate constant pattern
8
+ --> $DIR/issue-73976-polymorphic.rs:32:42
9
+ |
10
+ LL | matches!(GetTypeNameLen::<T>::VALUE, GetTypeNameLen::<T>::VALUE)
11
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
12
+
13
+ error: could not evaluate constant pattern
14
+ --> $DIR/issue-73976-polymorphic.rs:20:37
15
+ |
16
+ LL | matches!(GetTypeId::<T>::VALUE, GetTypeId::<T>::VALUE)
17
+ | ^^^^^^^^^^^^^^^^^^^^^
18
+
19
+ error: could not evaluate constant pattern
20
+ --> $DIR/issue-73976-polymorphic.rs:32:42
21
+ |
22
+ LL | matches!(GetTypeNameLen::<T>::VALUE, GetTypeNameLen::<T>::VALUE)
23
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
24
+
25
+ error: aborting due to 4 previous errors
26
+
Load Diff This file was deleted.
You can’t perform that action at this time.
0 commit comments