| // Tests that we properly detect defining usages when using |
| // const generics in an associated opaque type |
| |
| //@ check-pass |
| //@ revisions: current next |
| //@ ignore-compare-mode-next-solver (explicit revisions) |
| //@[next] compile-flags: -Znext-solver |
| #![feature(impl_trait_in_assoc_type)] |
| |
| trait UnwrapItemsExt<'a, const C: usize> { |
| type Iter; |
| fn unwrap_items(self) -> Self::Iter; |
| } |
| |
| struct MyStruct<const C: usize> {} |
| |
| trait MyTrait<'a, const C: usize> { |
| type MyItem; |
| const MY_CONST: usize; |
| } |
| |
| impl<'a, const C: usize> MyTrait<'a, C> for MyStruct<C> { |
| type MyItem = u8; |
| const MY_CONST: usize = C; |
| } |
| |
| impl<'a, I, const C: usize> UnwrapItemsExt<'a, C> for I { |
| type Iter = impl MyTrait<'a, C>; |
| |
| fn unwrap_items(self) -> Self::Iter { |
| MyStruct::<C> {} |
| } |
| } |
| |
| fn main() {} |