| //@ check-pass |
| #![allow(incomplete_features)] |
| #![feature(adt_const_params)] |
| #![feature(generic_const_exprs)] |
| |
| use std::marker::{ConstParamTy, 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, ConstParamTy)] |
| 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() {} |