/src/test/compile-fail/object-lifetime-default-from-box-error.rs

http://github.com/eholk/rust · Rust · 45 lines · 18 code · 11 blank · 16 comment · 0 complexity · 6180ea3db9633687229fd805f550f4d9 MD5 · raw file

  1. // Copyright 2015 The Rust Project Developers. See the COPYRIGHT
  2. // file at the top-level directory of this distribution and at
  3. // http://rust-lang.org/COPYRIGHT.
  4. //
  5. // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
  6. // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
  7. // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
  8. // option. This file may not be copied, modified, or distributed
  9. // except according to those terms.
  10. // Test various cases where the defaults should lead to errors being
  11. // reported.
  12. #![allow(dead_code)]
  13. trait SomeTrait {
  14. fn dummy(&self) { }
  15. }
  16. struct SomeStruct<'a> {
  17. r: Box<SomeTrait+'a>
  18. }
  19. fn load(ss: &mut SomeStruct) -> Box<SomeTrait> {
  20. // `Box<SomeTrait>` defaults to a `'static` bound, so this return
  21. // is illegal.
  22. ss.r //~ ERROR cannot infer an appropriate lifetime
  23. }
  24. fn store(ss: &mut SomeStruct, b: Box<SomeTrait>) {
  25. // No error: b is bounded by 'static which outlives the
  26. // (anonymous) lifetime on the struct.
  27. ss.r = b;
  28. }
  29. fn store1<'b>(ss: &mut SomeStruct, b: Box<SomeTrait+'b>) {
  30. // Here we override the lifetimes explicitly, and so naturally we get an error.
  31. ss.r = b; //~ ERROR cannot infer an appropriate lifetime
  32. }
  33. fn main() {
  34. }