// check-pass // known-bug: #104005 // Should fail. Function type parameters with implicit type annotations are not // checked for well-formedness, which allows incorrect borrowing. // In contrast, user annotations are always checked for well-formedness, and the // commented code below is correctly rejected by the borrow checker. use std::fmt::Display; trait Displayable { fn display(self) -> Box; } impl Displayable for (T, Option<&'static T>) { fn display(self) -> Box { Box::new(self.0) } } fn extend_lt(val: T) -> Box where (T, Option): Displayable, { Displayable::display((val, None)) } fn main() { // *incorrectly* compiles let val = extend_lt(&String::from("blah blah blah")); println!("{}", val); // *correctly* fails to compile // let val = extend_lt::<_, &_>(&String::from("blah blah blah")); // println!("{}", val); }