| // Test that `dyn Bar<Item = XX>` uses `'static` as the default object | 
 | // lifetime bound for the type `XX`. | 
 | // | 
 | //@ check-pass | 
 |  | 
 | trait Foo { | 
 |     type Item: ?Sized; | 
 |  | 
 |     fn item(&self) -> Box<Self::Item> { panic!() } | 
 | } | 
 |  | 
 | trait Bar { } | 
 |  | 
 | impl<T> Foo for T { | 
 |     type Item = dyn Bar; | 
 | } | 
 |  | 
 | fn is_static<T>(_: T) where T: 'static { } | 
 |  | 
 | // Here, we default to `dyn Bar + 'static`, and not `&'x dyn Foo<Item | 
 | // = dyn Bar + 'x>`. | 
 | fn bar(x: &str) -> &dyn Foo<Item = dyn Bar> { &() } | 
 |  | 
 | fn main() { | 
 |     let s = format!("foo"); | 
 |     let r = bar(&s); | 
 |     is_static(r.item()); | 
 | } |