| // Regression test for #84408. | |
| //@ check-pass | |
| #![feature(generic_const_exprs)] | |
| #![allow(incomplete_features)] | |
| trait Melon<const X: usize> { | |
| fn new(arr: [i32; X]) -> Self; | |
| fn change<T: Melon<X>>(self) -> T; | |
| } | |
| struct Foo([i32; 5]); | |
| struct Bar<const A: usize, const B: usize>([i32; A + B]) | |
| where | |
| [(); A + B]: ; | |
| impl Melon<5> for Foo { | |
| fn new(arr: [i32; 5]) -> Self { | |
| Foo(arr) | |
| } | |
| fn change<T: Melon<5>>(self) -> T { | |
| T::new(self.0) | |
| } | |
| } | |
| impl<const A: usize, const B: usize> Melon<{ A + B }> for Bar<A, B> | |
| where | |
| [(); A + B]: , | |
| { | |
| fn new(arr: [i32; A + B]) -> Self { | |
| Bar(arr) | |
| } | |
| fn change<T: Melon<{ A + B }>>(self) -> T { | |
| T::new(self.0) | |
| } | |
| } | |
| fn main() {} |