| // Test for normalization of projections that appear in the item bounds |
| // (versus those that appear directly in the input types). |
| // |
| //@ revisions: param_ty lifetime param_ty_no_compat lifetime_no_compat |
| |
| //@[param_ty] check-pass |
| //@[param_ty_no_compat] check-pass |
| //@[lifetime_no_compat] check-pass |
| //@[param_ty_no_compat] compile-flags: -Zno-implied-bounds-compat |
| //@[lifetime_no_compat] compile-flags: -Zno-implied-bounds-compat |
| |
| pub trait Iter { |
| type Item; |
| } |
| |
| #[cfg(any(param_ty, param_ty_no_compat))] |
| impl<X, I> Iter for I |
| where |
| I: IntoIterator<Item = X>, |
| { |
| type Item = X; |
| } |
| |
| #[cfg(any(lifetime, lifetime_no_compat))] |
| impl<'x, I> Iter for I |
| where |
| I: IntoIterator<Item = &'x ()>, |
| { |
| type Item = &'x (); |
| } |
| |
| pub struct Map<I>(I) |
| where |
| I: Iter, |
| I::Item: 'static; |
| |
| pub fn test_wfcheck<'x>(_: Map<Vec<&'x ()>>) {} |
| |
| pub fn test_borrowck<'x>(_: Map<Vec<&'x ()>>, s: &'x str) -> &'static str { |
| s |
| //[lifetime]~^ ERROR lifetime may not live long enough |
| } |
| |
| fn main() {} |