| //@ check-pass |
| #![crate_type = "lib"] |
| #![feature(generic_const_exprs)] |
| #![allow(incomplete_features)] |
| pub trait MyIterator { |
| type Output; |
| } |
| |
| pub trait Foo { |
| const ABC: usize; |
| } |
| |
| pub struct IteratorStruct<const N: usize>{ |
| |
| } |
| |
| pub struct Bar<const N: usize> { |
| pub data: [usize; N] |
| } |
| |
| impl<const N: usize> MyIterator for IteratorStruct<N> { |
| type Output = Bar<N>; |
| } |
| |
| pub fn test1<T: Foo>() -> impl MyIterator<Output = Bar<{T::ABC}>> where [(); T::ABC]: Sized { |
| IteratorStruct::<{T::ABC}>{} |
| } |
| |
| pub trait Baz<const N: usize>{} |
| impl<const N: usize> Baz<N> for Bar<N> {} |
| pub fn test2<T: Foo>() -> impl MyIterator<Output = impl Baz<{ T::ABC }>> where [(); T::ABC]: Sized { |
| IteratorStruct::<{T::ABC}>{} |
| } |