@@ -654,6 +654,32 @@ impl<T> Option<T> {
654654 !self . is_some ( )
655655}
656656
657+ /// Returns `true` if the option is a [`None`] or the value inside of it matches a predicate.
658+ ///
659+ /// # Examples
660+ ///
661+ /// ```
662+ /// #![feature(is_none_or)]
663+ ///
664+ /// let x: Option<u32> = Some(2);
665+ /// assert_eq!(x.is_none_or(|x| x > 1), true);
666+ ///
667+ /// let x: Option<u32> = Some(0);
668+ /// assert_eq!(x.is_none_or(|x| x > 1), false);
669+ ///
670+ /// let x: Option<u32> = None;
671+ /// assert_eq!(x.is_none_or(|x| x > 1), true);
672+ /// ```
673+ #[ must_use]
674+ #[ inline]
675+ #[ unstable( feature ="is_none_or" , issue ="none" ) ]
676+ pub fn is_none_or ( self , f : impl FnOnce ( T ) ->bool ) ->bool {
677+ match self {
678+ None =>true ,
679+ Some ( x) =>f ( x) ,
680+ }
681+ }
682+
657683/////////////////////////////////////////////////////////////////////////
658684// Adapter for working with references
659685/////////////////////////////////////////////////////////////////////////