| //@ check-pass | |
| //@ compile-flags: -Znext-solver | |
| use std::error::Error; | |
| fn main() -> Result<(), Box<dyn Error>> { | |
| let x: i32 = parse()?; | |
| Ok(()) | |
| } | |
| trait Parse {} | |
| impl Parse for i32 {} | |
| #[derive(Debug)] | |
| struct ParseError; | |
| impl std::fmt::Display for ParseError { | |
| fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | |
| write!(f, "ParseError") | |
| } | |
| } | |
| impl Error for ParseError {} | |
| fn parse<T: Parse>() -> Result<T, ParseError> { | |
| todo!() | |
| } |