#![allow(dead_code, deprecated, unused_variables, unused_mut)] #![feature(try_trait_v2)] use std::ops::Try; fn make_question_mark_work() -> Option<()> { assert_eq!(Option::from_output(4) ?, 4); None } fn main() { assert_eq!(< Result < _, String > as Try >::from_output(3), Ok(3)); assert_eq!(< Option < _ > as Try >::from_output(4), Some(4)); assert_eq!( < std::ops::ControlFlow < String, _ > as Try >::from_output(5), std::ops::ControlFlow::Continue(5), ); make_question_mark_work(); let r = std::iter::empty().try_fold(4, |_, ()| -> Option<_> { unreachable!() }); assert_eq!(r, Some(4)); }