mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 04:57:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			37 lines
		
	
	
		
			618 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			618 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // check-pass
 | |
| #![allow(incomplete_features)]
 | |
| #![feature(adt_const_params)]
 | |
| #![feature(generic_const_exprs)]
 | |
| use std::marker::PhantomData;
 | |
| 
 | |
| struct Foo<const I: i32, const J: i32> {}
 | |
| 
 | |
| const ONE: i32 = 1;
 | |
| const TWO: i32 = 2;
 | |
| 
 | |
| impl<const I: i32> Foo<I, ONE> {
 | |
|     pub fn foo() {}
 | |
| }
 | |
| 
 | |
| impl<const I: i32> Foo<I, TWO> {
 | |
|     pub fn foo() {}
 | |
| }
 | |
| 
 | |
| 
 | |
| pub struct Foo2<const P: Protocol, T> {
 | |
|     _marker: PhantomData<T>,
 | |
| }
 | |
| 
 | |
| #[derive(PartialEq, Eq)]
 | |
| pub enum Protocol {
 | |
|     Variant1,
 | |
|     Variant2,
 | |
| }
 | |
| 
 | |
| pub trait Bar {}
 | |
| 
 | |
| impl<T> Bar for Foo2<{ Protocol::Variant1 }, T> {}
 | |
| impl<T> Bar for Foo2<{ Protocol::Variant2 }, T> {}
 | |
| 
 | |
| fn main() {}
 | 
