1.9.0[][src]Trait std::panic::UnwindSafe

pub auto trait UnwindSafe { }

A marker trait which represents "panic safe" types in Rust.

This trait is implemented by default for many types and behaves similarly in terms of inference of implementation to the Send and Sync traits. The purpose of this trait is to encode what types are safe to cross a catch_unwind boundary with no fear of unwind safety.

What is unwind safety?

In Rust a function can "return" early if it either panics or calls a function which transitively panics. This sort of control flow is not always anticipated, and has the possibility of causing subtle bugs through a combination of two critical components:

  1. A data structure is in a temporarily invalid state when the thread panics.
  2. This broken invariant is then later observed.

Typically in Rust, it is difficult to perform step (2) because catching a panic involves either spawning a thread (which in turns makes it difficult to later witness broken invariants) or using the catch_unwind function in this module. Additionally, even if an invariant is witnessed, it typically isn't a problem in Rust because there are no uninitialized values (like in C or C++).

It is possible, however, for logical invariants to be broken in Rust, which can end up causing behavioral bugs. Another key aspect of unwind safety in Rust is that, in the absence of unsafe code, a panic cannot lead to memory unsafety.

That was a bit of a whirlwind tour of unwind safety, but for more information about unwind safety and how it applies to Rust, see an associated RFC.

What is UnwindSafe?

Now that we've got an idea of what unwind safety is in Rust, it's also important to understand what this trait represents. As mentioned above, one way to witness broken invariants is through the catch_unwind function in this module as it allows catching a panic and then re-using the environment of the closure.

Simply put, a type T implements UnwindSafe if it cannot easily allow witnessing a broken invariant through the use of catch_unwind (catching a panic). This trait is an auto trait, so it is automatically implemented for many types, and it is also structurally composed (e.g., a struct is unwind safe if all of its components are unwind safe).

Note, however, that this is not an unsafe trait, so there is not a succinct contract that this trait is providing. Instead it is intended as more of a "speed bump" to alert users of catch_unwind that broken invariants may be witnessed and may need to be accounted for.

Who implements UnwindSafe?

Types such as &mut T and &RefCell<T> are examples which are not unwind safe. The general idea is that any mutable state which can be shared across catch_unwind is not unwind safe by default. This is because it is very easy to witness a broken invariant outside of catch_unwind as the data is simply accessed as usual.

Types like &Mutex<T>, however, are unwind safe because they implement poisoning by default. They still allow witnessing a broken invariant, but they already provide their own "speed bumps" to do so.

When should UnwindSafe be used?

It is not intended that most types or functions need to worry about this trait. It is only used as a bound on the catch_unwind function and as mentioned above, the lack of unsafe means it is mostly an advisory. The AssertUnwindSafe wrapper struct can be used to force this trait to be implemented for any closed over variables passed to catch_unwind.

Implementations on Foreign Types

impl UnwindSafe for Argument

impl UnwindSafe for FormatSpec

impl UnwindSafe for Alignment

impl UnwindSafe for Count

impl UnwindSafe for Position

impl<T: UnwindSafe + ?Sized> UnwindSafe for Unique<T>[src]

Loading content...

Implementors

impl<'_, T: RefUnwindSafe + ?Sized> UnwindSafe for &'_ T[src]

impl<'_, T: ?Sized> !UnwindSafe for &'_ mut T[src]

impl<K, V, S> UnwindSafe for HashMap<K, V, S> where
    K: UnwindSafe,
    V: UnwindSafe,
    S: UnwindSafe
[src]

impl<T> UnwindSafe for AssertUnwindSafe<T>[src]

impl<T: RefUnwindSafe + ?Sized> UnwindSafe for *const T[src]

impl<T: RefUnwindSafe + ?Sized> UnwindSafe for *mut T[src]

impl<T: RefUnwindSafe + ?Sized> UnwindSafe for NonNull<T>[src]

impl<T: RefUnwindSafe + ?Sized> UnwindSafe for Rc<T>[src]

impl<T: RefUnwindSafe + ?Sized> UnwindSafe for Arc<T>[src]

impl<T: ?Sized> UnwindSafe for Mutex<T>[src]

impl<T: ?Sized> UnwindSafe for RwLock<T>[src]

Loading content...

Auto implementors

impl !UnwindSafe for std::io::Error

impl !UnwindSafe for std::sync::Once

impl !UnwindSafe for Thread

impl UnwindSafe for BacktraceStatus

impl UnwindSafe for std::cmp::Ordering

impl UnwindSafe for TryReserveError

impl UnwindSafe for Infallible

impl UnwindSafe for VarError

impl UnwindSafe for c_void

impl UnwindSafe for std::fmt::Alignment

impl UnwindSafe for ErrorKind

impl UnwindSafe for SeekFrom

impl UnwindSafe for IpAddr

impl UnwindSafe for Ipv6MulticastScope

impl UnwindSafe for Shutdown

impl UnwindSafe for std::net::SocketAddr

impl UnwindSafe for FpCategory

impl UnwindSafe for IntErrorKind

impl UnwindSafe for SearchStep

impl UnwindSafe for std::sync::atomic::Ordering

impl UnwindSafe for RecvTimeoutError

impl UnwindSafe for TryRecvError

impl UnwindSafe for bool

impl UnwindSafe for char

impl UnwindSafe for f32

impl UnwindSafe for f64

impl UnwindSafe for i128

impl UnwindSafe for i16

impl UnwindSafe for i32

impl UnwindSafe for i64

impl UnwindSafe for i8

impl UnwindSafe for isize

impl UnwindSafe for [u8]

impl UnwindSafe for str

impl UnwindSafe for u128

impl UnwindSafe for u16

impl UnwindSafe for u32

impl UnwindSafe for u64

impl UnwindSafe for u8

impl UnwindSafe for usize

impl UnwindSafe for AllocErr

impl UnwindSafe for CannotReallocInPlace

impl UnwindSafe for Excess

impl UnwindSafe for Global

impl UnwindSafe for Layout

impl UnwindSafe for LayoutErr

impl UnwindSafe for System

impl UnwindSafe for TypeId

impl UnwindSafe for TryFromSliceError

impl UnwindSafe for std::ascii::EscapeDefault

impl UnwindSafe for Backtrace

impl UnwindSafe for BorrowError

impl UnwindSafe for BorrowMutError

impl UnwindSafe for CharTryFromError

impl UnwindSafe for DecodeUtf16Error

impl UnwindSafe for std::char::EscapeDebug

impl UnwindSafe for std::char::EscapeDefault

impl UnwindSafe for std::char::EscapeUnicode

impl UnwindSafe for ParseCharError

impl UnwindSafe for ToLowercase

impl UnwindSafe for ToUppercase

impl UnwindSafe for UnicodeVersion

impl UnwindSafe for DefaultHasher

impl UnwindSafe for RandomState

impl UnwindSafe for Args

impl UnwindSafe for ArgsOs

impl UnwindSafe for JoinPathsError

impl UnwindSafe for Vars

impl UnwindSafe for VarsOs

impl UnwindSafe for CStr

impl UnwindSafe for CString

impl UnwindSafe for FromBytesWithNulError

impl UnwindSafe for IntoStringError

impl UnwindSafe for NulError

impl UnwindSafe for OsStr

impl UnwindSafe for OsString

impl UnwindSafe for std::fmt::Error

impl UnwindSafe for DirBuilder

impl UnwindSafe for DirEntry

impl UnwindSafe for File

impl UnwindSafe for FileType

impl UnwindSafe for Metadata

impl UnwindSafe for OpenOptions

impl UnwindSafe for Permissions

impl UnwindSafe for ReadDir

impl UnwindSafe for SipHasher

impl UnwindSafe for std::io::Empty

impl UnwindSafe for Initializer

impl UnwindSafe for std::io::Repeat

impl UnwindSafe for Sink

impl UnwindSafe for Stderr

impl UnwindSafe for Stdin

impl UnwindSafe for Stdout

impl UnwindSafe for PhantomPinned

impl UnwindSafe for AddrParseError

impl UnwindSafe for Ipv4Addr

impl UnwindSafe for Ipv6Addr

impl UnwindSafe for SocketAddrV4

impl UnwindSafe for SocketAddrV6

impl UnwindSafe for TcpListener

impl UnwindSafe for TcpStream

impl UnwindSafe for UdpSocket

impl UnwindSafe for NonZeroI128

impl UnwindSafe for NonZeroI16

impl UnwindSafe for NonZeroI32

impl UnwindSafe for NonZeroI64

impl UnwindSafe for NonZeroI8

impl UnwindSafe for NonZeroIsize

impl UnwindSafe for NonZeroU128

impl UnwindSafe for NonZeroU16

impl UnwindSafe for NonZeroU32

impl UnwindSafe for NonZeroU64

impl UnwindSafe for NonZeroU8

impl UnwindSafe for NonZeroUsize

impl UnwindSafe for ParseFloatError

impl UnwindSafe for ParseIntError

impl UnwindSafe for TryFromIntError

impl UnwindSafe for RangeFull

impl UnwindSafe for NoneError

impl UnwindSafe for stat

impl UnwindSafe for std::os::unix::net::SocketAddr

impl UnwindSafe for UnixDatagram

impl UnwindSafe for UnixListener

impl UnwindSafe for UnixStream

impl UnwindSafe for Path

impl UnwindSafe for PathBuf

impl UnwindSafe for StripPrefixError

impl UnwindSafe for Child

impl UnwindSafe for ChildStderr

impl UnwindSafe for ChildStdin

impl UnwindSafe for ChildStdout

impl UnwindSafe for Command

impl UnwindSafe for ExitCode

impl UnwindSafe for ExitStatus

impl UnwindSafe for Output

impl UnwindSafe for Stdio

impl UnwindSafe for TraitObject

impl UnwindSafe for ParseBoolError

impl UnwindSafe for Utf8Error

impl UnwindSafe for FromUtf16Error

impl UnwindSafe for FromUtf8Error

impl UnwindSafe for String

impl UnwindSafe for AtomicBool

impl UnwindSafe for AtomicI16

impl UnwindSafe for AtomicI32

impl UnwindSafe for AtomicI64

impl UnwindSafe for AtomicI8

impl UnwindSafe for AtomicIsize

impl UnwindSafe for AtomicU16

impl UnwindSafe for AtomicU32

impl UnwindSafe for AtomicU64

impl UnwindSafe for AtomicU8

impl UnwindSafe for AtomicUsize

impl UnwindSafe for RecvError

impl UnwindSafe for Barrier

impl UnwindSafe for BarrierWaitResult

impl UnwindSafe for Condvar

impl UnwindSafe for OnceState

impl UnwindSafe for WaitTimeoutResult

impl UnwindSafe for RawWaker

impl UnwindSafe for RawWakerVTable

impl UnwindSafe for Waker

impl UnwindSafe for AccessError

impl UnwindSafe for Builder

impl UnwindSafe for ThreadId

impl UnwindSafe for Duration

impl UnwindSafe for Instant

impl UnwindSafe for SystemTime

impl UnwindSafe for SystemTimeError

impl<'a> !UnwindSafe for ErrorIter<'a>

impl<'a> !UnwindSafe for Arguments<'a>

impl<'a> !UnwindSafe for Formatter<'a>

impl<'a> !UnwindSafe for IoSliceMut<'a>

impl<'a> !UnwindSafe for PanicInfo<'a>

impl<'a> UnwindSafe for Component<'a>

impl<'a> UnwindSafe for Prefix<'a>

impl<'a> UnwindSafe for SplitPaths<'a>

impl<'a> UnwindSafe for IoSlice<'a>

impl<'a> UnwindSafe for StderrLock<'a>

impl<'a> UnwindSafe for StdinLock<'a>

impl<'a> UnwindSafe for StdoutLock<'a>

impl<'a> UnwindSafe for std::net::Incoming<'a>

impl<'a> UnwindSafe for std::os::unix::net::Incoming<'a>

impl<'a> UnwindSafe for EncodeWide<'a>

impl<'a> UnwindSafe for Location<'a>

impl<'a> UnwindSafe for Ancestors<'a>

impl<'a> UnwindSafe for Components<'a>

impl<'a> UnwindSafe for Display<'a>

impl<'a> UnwindSafe for std::path::Iter<'a>

impl<'a> UnwindSafe for PrefixComponent<'a>

impl<'a> UnwindSafe for CharSearcher<'a>

impl<'a> UnwindSafe for std::str::Bytes<'a>

impl<'a> UnwindSafe for CharIndices<'a>

impl<'a> UnwindSafe for Chars<'a>

impl<'a> UnwindSafe for EncodeUtf16<'a>

impl<'a> UnwindSafe for std::str::EscapeDebug<'a>

impl<'a> UnwindSafe for std::str::EscapeDefault<'a>

impl<'a> UnwindSafe for std::str::EscapeUnicode<'a>

impl<'a> UnwindSafe for std::str::Lines<'a>

impl<'a> UnwindSafe for LinesAny<'a>

impl<'a> UnwindSafe for SplitAsciiWhitespace<'a>

impl<'a> UnwindSafe for SplitWhitespace<'a>

impl<'a> UnwindSafe for std::string::Drain<'a>

impl<'a> UnwindSafe for Context<'a>

impl<'a, 'b> !UnwindSafe for DebugList<'a, 'b>

impl<'a, 'b> !UnwindSafe for DebugMap<'a, 'b>

impl<'a, 'b> !UnwindSafe for DebugSet<'a, 'b>

impl<'a, 'b> !UnwindSafe for DebugStruct<'a, 'b>

impl<'a, 'b> !UnwindSafe for DebugTuple<'a, 'b>

impl<'a, 'b> UnwindSafe for CharSliceSearcher<'a, 'b>

impl<'a, 'b> UnwindSafe for StrSearcher<'a, 'b>

impl<'a, 'f> !UnwindSafe for VaList<'a, 'f>

impl<'a, A> !UnwindSafe for std::option::IterMut<'a, A>

impl<'a, A> UnwindSafe for std::option::Iter<'a, A> where
    A: RefUnwindSafe

impl<'a, B: ?Sized> UnwindSafe for Cow<'a, B> where
    B: RefUnwindSafe,
    <B as ToOwned>::Owned: UnwindSafe

impl<'a, F> UnwindSafe for CharPredicateSearcher<'a, F> where
    F: MultiCharEq + UnwindSafe

impl<'a, I> UnwindSafe for Splice<'a, I> where
    I: UnwindSafe,
    <I as Iterator>::Item: RefUnwindSafe

impl<'a, K> UnwindSafe for std::collections::hash_set::Drain<'a, K> where
    K: RefUnwindSafe + UnwindSafe

impl<'a, K> UnwindSafe for std::collections::hash_set::Iter<'a, K> where
    K: RefUnwindSafe

impl<'a, K, V> !UnwindSafe for std::collections::btree_map::Entry<'a, K, V>

impl<'a, K, V> !UnwindSafe for std::collections::hash_map::Entry<'a, K, V>

impl<'a, K, V> !UnwindSafe for std::collections::btree_map::IterMut<'a, K, V>

impl<'a, K, V> !UnwindSafe for std::collections::btree_map::OccupiedEntry<'a, K, V>

impl<'a, K, V> !UnwindSafe for RangeMut<'a, K, V>

impl<'a, K, V> !UnwindSafe for std::collections::btree_map::VacantEntry<'a, K, V>

impl<'a, K, V> !UnwindSafe for std::collections::btree_map::ValuesMut<'a, K, V>

impl<'a, K, V> !UnwindSafe for std::collections::hash_map::IterMut<'a, K, V>

impl<'a, K, V> !UnwindSafe for std::collections::hash_map::OccupiedEntry<'a, K, V>

impl<'a, K, V> !UnwindSafe for RawOccupiedEntryMut<'a, K, V>

impl<'a, K, V> !UnwindSafe for std::collections::hash_map::VacantEntry<'a, K, V>

impl<'a, K, V> !UnwindSafe for std::collections::hash_map::ValuesMut<'a, K, V>

impl<'a, K, V> UnwindSafe for std::collections::btree_map::Iter<'a, K, V> where
    K: RefUnwindSafe,
    V: RefUnwindSafe

impl<'a, K, V> UnwindSafe for std::collections::btree_map::Keys<'a, K, V> where
    K: RefUnwindSafe,
    V: RefUnwindSafe

impl<'a, K, V> UnwindSafe for std::collections::btree_map::Range<'a, K, V> where
    K: RefUnwindSafe,
    V: RefUnwindSafe

impl<'a, K, V> UnwindSafe for std::collections::btree_map::Values<'a, K, V> where
    K: RefUnwindSafe,
    V: RefUnwindSafe

impl<'a, K, V> UnwindSafe for std::collections::hash_map::Drain<'a, K, V> where
    K: RefUnwindSafe + UnwindSafe,
    V: RefUnwindSafe + UnwindSafe

impl<'a, K, V> UnwindSafe for std::collections::hash_map::Iter<'a, K, V> where
    K: RefUnwindSafe,
    V: RefUnwindSafe

impl<'a, K, V> UnwindSafe for std::collections::hash_map::Keys<'a, K, V> where
    K: RefUnwindSafe,
    V: RefUnwindSafe

impl<'a, K, V> UnwindSafe for std::collections::hash_map::Values<'a, K, V> where
    K: RefUnwindSafe,
    V: RefUnwindSafe

impl<'a, K, V, S> !UnwindSafe for RawEntryMut<'a, K, V, S>

impl<'a, K, V, S> !UnwindSafe for RawEntryBuilderMut<'a, K, V, S>

impl<'a, K, V, S> !UnwindSafe for RawVacantEntryMut<'a, K, V, S>

impl<'a, K, V, S> UnwindSafe for RawEntryBuilder<'a, K, V, S> where
    K: RefUnwindSafe,
    S: RefUnwindSafe,
    V: RefUnwindSafe

impl<'a, P> UnwindSafe for MatchIndices<'a, P> where
    <P as Pattern<'a>>::Searcher: UnwindSafe

impl<'a, P> UnwindSafe for Matches<'a, P> where
    <P as Pattern<'a>>::Searcher: UnwindSafe

impl<'a, P> UnwindSafe for RMatchIndices<'a, P> where
    <P as Pattern<'a>>::Searcher: UnwindSafe

impl<'a, P> UnwindSafe for RMatches<'a, P> where
    <P as Pattern<'a>>::Searcher: UnwindSafe

impl<'a, P> UnwindSafe for std::str::RSplit<'a, P> where
    <P as Pattern<'a>>::Searcher: UnwindSafe

impl<'a, P> UnwindSafe for std::str::RSplitN<'a, P> where
    <P as Pattern<'a>>::Searcher: UnwindSafe

impl<'a, P> UnwindSafe for RSplitTerminator<'a, P> where
    <P as Pattern<'a>>::Searcher: UnwindSafe

impl<'a, P> UnwindSafe for std::str::Split<'a, P> where
    <P as Pattern<'a>>::Searcher: UnwindSafe

impl<'a, P> UnwindSafe for std::str::SplitN<'a, P> where
    <P as Pattern<'a>>::Searcher: UnwindSafe

impl<'a, P> UnwindSafe for SplitTerminator<'a, P> where
    <P as Pattern<'a>>::Searcher: UnwindSafe

impl<'a, T> !UnwindSafe for PeekMut<'a, T>

impl<'a, T> !UnwindSafe for std::collections::linked_list::IterMut<'a, T>

impl<'a, T> !UnwindSafe for std::collections::vec_deque::IterMut<'a, T>

impl<'a, T> !UnwindSafe for std::result::IterMut<'a, T>

impl<'a, T> !UnwindSafe for ChunksExactMut<'a, T>

impl<'a, T> !UnwindSafe for ChunksMut<'a, T>

impl<'a, T> !UnwindSafe for std::slice::IterMut<'a, T>

impl<'a, T> !UnwindSafe for RChunksExactMut<'a, T>

impl<'a, T> !UnwindSafe for RChunksMut<'a, T>

impl<'a, T> !UnwindSafe for std::sync::mpsc::Iter<'a, T>

impl<'a, T> !UnwindSafe for TryIter<'a, T>

impl<'a, T> UnwindSafe for std::collections::binary_heap::Drain<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for std::collections::binary_heap::Iter<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for std::collections::btree_set::Difference<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for std::collections::btree_set::Intersection<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for std::collections::btree_set::Iter<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for std::collections::btree_set::Range<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for std::collections::btree_set::SymmetricDifference<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for std::collections::btree_set::Union<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for std::collections::linked_list::Iter<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for std::collections::vec_deque::Drain<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for std::collections::vec_deque::Iter<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for std::result::Iter<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for Chunks<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for ChunksExact<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for std::slice::Iter<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for RChunks<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for RChunksExact<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for Windows<'a, T> where
    T: RefUnwindSafe

impl<'a, T> UnwindSafe for std::vec::Drain<'a, T> where
    T: RefUnwindSafe

impl<'a, T, F> !UnwindSafe for std::collections::linked_list::DrainFilter<'a, T, F>

impl<'a, T, F> !UnwindSafe for std::vec::DrainFilter<'a, T, F>

impl<'a, T, P> !UnwindSafe for RSplitMut<'a, T, P>

impl<'a, T, P> !UnwindSafe for RSplitNMut<'a, T, P>

impl<'a, T, P> !UnwindSafe for SplitMut<'a, T, P>

impl<'a, T, P> !UnwindSafe for SplitNMut<'a, T, P>

impl<'a, T, P> UnwindSafe for std::slice::RSplit<'a, T, P> where
    P: UnwindSafe,
    T: RefUnwindSafe

impl<'a, T, P> UnwindSafe for std::slice::RSplitN<'a, T, P> where
    P: UnwindSafe,
    T: RefUnwindSafe

impl<'a, T, P> UnwindSafe for std::slice::Split<'a, T, P> where
    P: UnwindSafe,
    T: RefUnwindSafe

impl<'a, T, P> UnwindSafe for std::slice::SplitN<'a, T, P> where
    P: UnwindSafe,
    T: RefUnwindSafe

impl<'a, T, S> UnwindSafe for std::collections::hash_set::Difference<'a, T, S> where
    S: RefUnwindSafe,
    T: RefUnwindSafe

impl<'a, T, S> UnwindSafe for std::collections::hash_set::Intersection<'a, T, S> where
    S: RefUnwindSafe,
    T: RefUnwindSafe

impl<'a, T, S> UnwindSafe for std::collections::hash_set::SymmetricDifference<'a, T, S> where
    S: RefUnwindSafe,
    T: RefUnwindSafe

impl<'a, T, S> UnwindSafe for std::collections::hash_set::Union<'a, T, S> where
    S: RefUnwindSafe,
    T: RefUnwindSafe

impl<'a, T: ?Sized> UnwindSafe for MutexGuard<'a, T>

impl<'a, T: ?Sized> UnwindSafe for RwLockReadGuard<'a, T>

impl<'a, T: ?Sized> UnwindSafe for RwLockWriteGuard<'a, T>

impl<'b, T> !UnwindSafe for Ref<'b, T>

impl<'b, T> !UnwindSafe for RefMut<'b, T>

impl<'f> !UnwindSafe for VaListImpl<'f>

impl<A> UnwindSafe for std::iter::Repeat<A> where
    A: UnwindSafe

impl<A> UnwindSafe for std::option::IntoIter<A> where
    A: UnwindSafe

impl<A, B> UnwindSafe for std::iter::Chain<A, B> where
    A: UnwindSafe,
    B: UnwindSafe

impl<A, B> UnwindSafe for Zip<A, B> where
    A: UnwindSafe,
    B: UnwindSafe

impl<B> UnwindSafe for std::io::Lines<B> where
    B: UnwindSafe

impl<B> UnwindSafe for std::io::Split<B> where
    B: UnwindSafe

impl<F> UnwindSafe for FromFn<F> where
    F: UnwindSafe

impl<F> UnwindSafe for OnceWith<F> where
    F: UnwindSafe

impl<F> UnwindSafe for RepeatWith<F> where
    F: UnwindSafe

impl<H> UnwindSafe for BuildHasherDefault<H> where
    H: UnwindSafe

impl<I> UnwindSafe for DecodeUtf16<I> where
    I: UnwindSafe

impl<I> UnwindSafe for Cloned<I> where
    I: UnwindSafe

impl<I> UnwindSafe for Copied<I> where
    I: UnwindSafe

impl<I> UnwindSafe for Cycle<I> where
    I: UnwindSafe

impl<I> UnwindSafe for Enumerate<I> where
    I: UnwindSafe

impl<I> UnwindSafe for Flatten<I> where
    I: UnwindSafe,
    <<I as Iterator>::Item as IntoIterator>::IntoIter: UnwindSafe

impl<I> UnwindSafe for Fuse<I> where
    I: UnwindSafe

impl<I> UnwindSafe for Peekable<I> where
    I: UnwindSafe,
    <I as Iterator>::Item: UnwindSafe

impl<I> UnwindSafe for Skip<I> where
    I: UnwindSafe

impl<I> UnwindSafe for StepBy<I> where
    I: UnwindSafe

impl<I> UnwindSafe for std::iter::Take<I> where
    I: UnwindSafe

impl<I, F> UnwindSafe for FilterMap<I, F> where
    F: UnwindSafe,
    I: UnwindSafe

impl<I, F> UnwindSafe for Inspect<I, F> where
    F: UnwindSafe,
    I: UnwindSafe

impl<I, F> UnwindSafe for Map<I, F> where
    F: UnwindSafe,
    I: UnwindSafe

impl<I, P> UnwindSafe for Filter<I, P> where
    I: UnwindSafe,
    P: UnwindSafe

impl<I, P> UnwindSafe for SkipWhile<I, P> where
    I: UnwindSafe,
    P: UnwindSafe

impl<I, P> UnwindSafe for TakeWhile<I, P> where
    I: UnwindSafe,
    P: UnwindSafe

impl<I, St, F> UnwindSafe for Scan<I, St, F> where
    F: UnwindSafe,
    I: UnwindSafe,
    St: UnwindSafe

impl<I, U, F> UnwindSafe for FlatMap<I, U, F> where
    F: UnwindSafe,
    I: UnwindSafe,
    <U as IntoIterator>::IntoIter: UnwindSafe

impl<Idx> UnwindSafe for std::ops::Range<Idx> where
    Idx: UnwindSafe

impl<Idx> UnwindSafe for RangeFrom<Idx> where
    Idx: UnwindSafe

impl<Idx> UnwindSafe for RangeInclusive<Idx> where
    Idx: UnwindSafe

impl<Idx> UnwindSafe for RangeTo<Idx> where
    Idx: UnwindSafe

impl<Idx> UnwindSafe for RangeToInclusive<Idx> where
    Idx: UnwindSafe

impl<K> UnwindSafe for std::collections::hash_set::IntoIter<K> where
    K: RefUnwindSafe + UnwindSafe

impl<K, V> UnwindSafe for BTreeMap<K, V> where
    K: RefUnwindSafe + UnwindSafe,
    V: RefUnwindSafe + UnwindSafe

impl<K, V> UnwindSafe for std::collections::btree_map::IntoIter<K, V> where
    K: RefUnwindSafe,
    V: RefUnwindSafe

impl<K, V> UnwindSafe for std::collections::hash_map::IntoIter<K, V> where
    K: RefUnwindSafe + UnwindSafe,
    V: RefUnwindSafe + UnwindSafe

impl<P> UnwindSafe for Pin<P> where
    P: UnwindSafe

impl<R> UnwindSafe for BufReader<R> where
    R: UnwindSafe

impl<R> UnwindSafe for std::io::Bytes<R> where
    R: UnwindSafe

impl<T> !UnwindSafe for std::rc::Weak<T>

impl<T> !UnwindSafe for std::sync::mpsc::IntoIter<T>

impl<T> !UnwindSafe for Receiver<T>

impl<T> !UnwindSafe for Sender<T>

impl<T> !UnwindSafe for JoinHandle<T>

impl<T> UnwindSafe for Bound<T> where
    T: UnwindSafe

impl<T> UnwindSafe for Option<T> where
    T: UnwindSafe

impl<T> UnwindSafe for TryLockError<T> where
    T: UnwindSafe

impl<T> UnwindSafe for TrySendError<T> where
    T: UnwindSafe

impl<T> UnwindSafe for Poll<T> where
    T: UnwindSafe

impl<T> UnwindSafe for [T] where
    T: UnwindSafe

impl<T> UnwindSafe for Reverse<T> where
    T: UnwindSafe

impl<T> UnwindSafe for BinaryHeap<T> where
    T: UnwindSafe

impl<T> UnwindSafe for std::collections::binary_heap::IntoIter<T> where
    T: RefUnwindSafe + UnwindSafe

impl<T> UnwindSafe for BTreeSet<T> where
    T: RefUnwindSafe + UnwindSafe

impl<T> UnwindSafe for std::collections::btree_set::IntoIter<T> where
    T: RefUnwindSafe

impl<T> UnwindSafe for std::collections::linked_list::IntoIter<T> where
    T: RefUnwindSafe + UnwindSafe

impl<T> UnwindSafe for LinkedList<T> where
    T: RefUnwindSafe + UnwindSafe

impl<T> UnwindSafe for std::collections::vec_deque::IntoIter<T> where
    T: UnwindSafe

impl<T> UnwindSafe for VecDeque<T> where
    T: UnwindSafe

impl<T> UnwindSafe for Cursor<T> where
    T: UnwindSafe

impl<T> UnwindSafe for std::io::Take<T> where
    T: UnwindSafe

impl<T> UnwindSafe for std::iter::Empty<T> where
    T: UnwindSafe

impl<T> UnwindSafe for std::iter::Once<T> where
    T: UnwindSafe

impl<T> UnwindSafe for Rev<T> where
    T: UnwindSafe

impl<T> UnwindSafe for Discriminant<T>

impl<T> UnwindSafe for Wrapping<T> where
    T: UnwindSafe

impl<T> UnwindSafe for std::result::IntoIter<T> where
    T: UnwindSafe

impl<T> UnwindSafe for AtomicPtr<T> where
    T: RefUnwindSafe

impl<T> UnwindSafe for SendError<T> where
    T: UnwindSafe

impl<T> UnwindSafe for SyncSender<T>

impl<T> UnwindSafe for PoisonError<T> where
    T: UnwindSafe

impl<T> UnwindSafe for LocalKey<T>

impl<T> UnwindSafe for std::vec::IntoIter<T> where
    T: RefUnwindSafe + UnwindSafe

impl<T> UnwindSafe for Vec<T> where
    T: UnwindSafe

impl<T> UnwindSafe for MaybeUninit<T> where
    T: UnwindSafe

impl<T, E> UnwindSafe for Result<T, E> where
    E: UnwindSafe,
    T: UnwindSafe

impl<T, F> UnwindSafe for Successors<T, F> where
    F: UnwindSafe,
    T: UnwindSafe

impl<T, S> UnwindSafe for HashSet<T, S> where
    S: UnwindSafe,
    T: UnwindSafe

impl<T, U> UnwindSafe for std::io::Chain<T, U> where
    T: UnwindSafe,
    U: UnwindSafe

impl<T: ?Sized> UnwindSafe for Box<T> where
    T: UnwindSafe

impl<T: ?Sized> UnwindSafe for Cell<T> where
    T: UnwindSafe

impl<T: ?Sized> UnwindSafe for RefCell<T> where
    T: UnwindSafe

impl<T: ?Sized> UnwindSafe for UnsafeCell<T> where
    T: UnwindSafe

impl<T: ?Sized> UnwindSafe for PhantomData<T> where
    T: UnwindSafe

impl<T: ?Sized> UnwindSafe for ManuallyDrop<T> where
    T: UnwindSafe

impl<T: ?Sized> UnwindSafe for std::sync::Weak<T> where
    T: RefUnwindSafe

impl<W> !UnwindSafe for IntoInnerError<W>

impl<W> UnwindSafe for BufWriter<W> where
    W: UnwindSafe

impl<W> UnwindSafe for LineWriter<W> where
    W: UnwindSafe

impl<Y, R> UnwindSafe for GeneratorState<Y, R> where
    R: UnwindSafe,
    Y: UnwindSafe

Loading content...