File tree Expand file tree Collapse file tree 2 files changed +60
-0
lines changed
src/test/ui/const-generics/type-dependent Expand file tree Collapse file tree 2 files changed +60
-0
lines changed Original file line number Diff line number Diff line change
1
+ #![ feature( const_generics) ]
2
+ #![ allow( incomplete_features) ]
3
+
4
+ pub struct Struct < const N : usize > ( ( ) ) ;
5
+
6
+ impl < const N : usize > Struct < N > {
7
+ pub fn new ( ) -> Self {
8
+ Struct ( ( ) )
9
+ }
10
+
11
+ pub fn same_ty < const M : usize > ( & self ) -> ( usize , usize ) {
12
+ ( N , M )
13
+ }
14
+
15
+ pub fn different_ty < const M : u8 > ( & self ) -> ( usize , u8 ) {
16
+ ( N , M )
17
+ }
18
+
19
+ pub fn containing_ty < T , const M : u8 > ( & self ) -> ( usize , u8 ) {
20
+ ( std:: mem:: size_of :: < T > ( ) + N , M )
21
+ }
22
+
23
+ pub fn we_have_to_go_deeper < const M : usize > ( & self ) -> Struct < M > {
24
+ Struct ( ( ) )
25
+ }
26
+ }
27
+
28
+ pub trait Foo {
29
+ fn foo < const M : usize > ( & self ) -> usize ;
30
+ }
31
+
32
+ impl Foo for Struct < 7 > {
33
+ fn foo < const M : usize > ( & self ) -> usize {
34
+ M
35
+ }
36
+ }
Original file line number Diff line number Diff line change
1
+ // aux-build:type_dependent_lib.rs
2
+ // run-pass
3
+ #![ feature( const_generics) ]
4
+ #![ allow( incomplete_features) ]
5
+
6
+ extern crate type_dependent_lib;
7
+
8
+ use type_dependent_lib:: * ;
9
+
10
+ fn main ( ) {
11
+ let s = Struct :: < 42 > :: new ( ) ;
12
+ assert_eq ! ( s. same_ty:: <7 >( ) , ( 42 , 7 ) ) ;
13
+ assert_eq ! ( s. different_ty:: <19 >( ) , ( 42 , 19 ) ) ;
14
+ assert_eq ! ( Struct :: <1337 >:: new( ) . different_ty:: <96 >( ) , ( 1337 , 96 ) ) ;
15
+ assert_eq ! (
16
+ Struct :: <18 >:: new( )
17
+ . we_have_to_go_deeper:: <19 >( )
18
+ . containing_ty:: <Option <u32 >, 3 >( ) ,
19
+ ( 27 , 3 ) ,
20
+ ) ;
21
+
22
+ let s = Struct :: < 7 > :: new ( ) ;
23
+ assert_eq ! ( s. foo:: <18 >( ) , 18 ) ;
24
+ }
You can’t perform that action at this time.
0 commit comments