Trait 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:
- A data structure is in a temporarily invalid state when the thread panics.
- 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 turn 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.
Implementors
impl !UnwindSafe for Errorimpl !UnwindSafe for Reprimpl UnwindSafe for Abiimpl UnwindSafe for AddrKindimpl UnwindSafe for AddrParseErrorimpl UnwindSafe for AesOutputimpl UnwindSafe for Alignmentimpl UnwindSafe for Alignmentimpl UnwindSafe for AlignmentEnumimpl UnwindSafe for AllocErrorimpl UnwindSafe for AlwaysEscapedimpl UnwindSafe for Arrayimpl UnwindSafe for AsciiCharimpl UnwindSafe for Assumeimpl UnwindSafe for AtomicOrderingimpl UnwindSafe for BasicBlockimpl UnwindSafe for BiasedFpimpl UnwindSafe for Big32x40impl UnwindSafe for Big8x3impl UnwindSafe for BorrowErrorimpl UnwindSafe for BorrowMutErrorimpl UnwindSafe for BorrowedBufDebugimpl UnwindSafe for ByteNeedleimpl UnwindSafe for ByteStrimpl UnwindSafe for BytesIsNotEmptyimpl UnwindSafe for CStrimpl UnwindSafe for CaseMappingIterimpl UnwindSafe for CharCaseimpl UnwindSafe for CharErrorKindimpl UnwindSafe for CharEscapeDebugContinueimpl UnwindSafe for CharEscapeDefaultimpl UnwindSafe for CharEscapeUnicodeimpl UnwindSafe for CharTryFromErrorimpl UnwindSafe for CodePointInnerimpl UnwindSafe for Constimpl UnwindSafe for CpuidResultimpl UnwindSafe for DebugAsHeximpl UnwindSafe for Decimalimpl UnwindSafe for DecimalSeqimpl UnwindSafe for DecodeUtf16Errorimpl UnwindSafe for Decodedimpl UnwindSafe for Directionimpl UnwindSafe for DriftsortRunimpl UnwindSafe for Durationimpl UnwindSafe for DynTraitimpl UnwindSafe for DynTraitPredicateimpl UnwindSafe for Emptyimpl UnwindSafe for EmptyNeedleimpl UnwindSafe for EncodeKey128Outputimpl UnwindSafe for EncodeKey256Outputimpl UnwindSafe for Errorimpl UnwindSafe for ErrorKindimpl UnwindSafe for EscapeByteimpl UnwindSafe for EscapeDebugimpl UnwindSafe for EscapeDebugExtArgsimpl UnwindSafe for EscapeDefaultimpl UnwindSafe for EscapeDefaultimpl UnwindSafe for EscapeUnicodeimpl UnwindSafe for FieldIdimpl UnwindSafe for FindImmimpl UnwindSafe for FloatErrorKindimpl UnwindSafe for FnPtrimpl UnwindSafe for FormattingOptionsimpl UnwindSafe for FpCategoryimpl UnwindSafe for FromBytesUntilNulErrorimpl UnwindSafe for FromBytesWithNulErrorimpl UnwindSafe for FullDecodedimpl UnwindSafe for Genericimpl UnwindSafe for GenericTypeimpl UnwindSafe for GetDisjointMutErrorimpl UnwindSafe for HvxVectorimpl UnwindSafe for HvxVectorimpl UnwindSafe for HvxVectorPairimpl UnwindSafe for HvxVectorPairimpl UnwindSafe for HvxVectorPredimpl UnwindSafe for HvxVectorPredimpl UnwindSafe for I32NotAllOnesimpl UnwindSafe for I64NotAllOnesimpl UnwindSafe for IndexRangeimpl UnwindSafe for Infallibleimpl UnwindSafe for IntErrorKindimpl UnwindSafe for Internalimpl UnwindSafe for IpAddrimpl UnwindSafe for Ipv4Addrimpl UnwindSafe for Ipv6Addrimpl UnwindSafe for Ipv6MulticastScopeimpl UnwindSafe for IsAsciiWhitespaceimpl UnwindSafe for IsNotEmptyimpl UnwindSafe for IsWhitespaceimpl UnwindSafe for L1Lutimpl UnwindSafe for L2Lutimpl UnwindSafe for Lastimpl UnwindSafe for Layoutimpl UnwindSafe for LayoutErrorimpl UnwindSafe for Lifetimeimpl UnwindSafe for LinesMapimpl UnwindSafe for LocalWakerimpl UnwindSafe for Localityimpl UnwindSafe for MatchOnlyimpl UnwindSafe for MaybeEscapedimpl UnwindSafe for Nanosecondsimpl UnwindSafe for NeverShortCircuitResidualimpl UnwindSafe for NonZeroCharInnerimpl UnwindSafe for NonZeroI128Innerimpl UnwindSafe for NonZeroI16Innerimpl UnwindSafe for NonZeroI32Innerimpl UnwindSafe for NonZeroI64Innerimpl UnwindSafe for NonZeroI8Innerimpl UnwindSafe for NonZeroIsizeInnerimpl UnwindSafe for NonZeroU128Innerimpl UnwindSafe for NonZeroU16Innerimpl UnwindSafe for NonZeroU32Innerimpl UnwindSafe for NonZeroU64Innerimpl UnwindSafe for NonZeroU8Innerimpl UnwindSafe for NonZeroUsizeInnerimpl UnwindSafe for OneSidedRangeBoundimpl UnwindSafe for Orderingimpl UnwindSafe for Orderingimpl UnwindSafe for PadAdapterStateimpl UnwindSafe for ParseBoolErrorimpl UnwindSafe for ParseCharErrorimpl UnwindSafe for ParseFloatErrorimpl UnwindSafe for ParseIntErrorimpl UnwindSafe for PhantomPinnedimpl UnwindSafe for Pointerimpl UnwindSafe for PostPaddingimpl UnwindSafe for Rangeimpl UnwindSafe for RangeFullimpl UnwindSafe for RawWakerimpl UnwindSafe for RawWakerVTableimpl UnwindSafe for Referenceimpl UnwindSafe for RejectAndMatchimpl UnwindSafe for Repeatimpl UnwindSafe for ReturnToArgimpl UnwindSafe for SYimpl UnwindSafe for SearchStepimpl UnwindSafe for SeekFromimpl UnwindSafe for ShortOffsetRunHeaderimpl UnwindSafe for Signimpl UnwindSafe for Signimpl UnwindSafe for SimdAlignimpl UnwindSafe for Sinkimpl UnwindSafe for Sip13Roundsimpl UnwindSafe for Sip24Roundsimpl UnwindSafe for SipHasherimpl UnwindSafe for SipHasher24impl UnwindSafe for Sliceimpl UnwindSafe for SocketAddrimpl UnwindSafe for SocketAddrV4impl UnwindSafe for SocketAddrV6impl UnwindSafe for Stateimpl UnwindSafe for Strimpl UnwindSafe for StrSearcherImplimpl UnwindSafe for ToCasefoldimpl UnwindSafe for ToLowercaseimpl UnwindSafe for ToTitlecaseimpl UnwindSafe for ToUppercaseimpl UnwindSafe for Traitimpl UnwindSafe for TryCaptureWithDebugimpl UnwindSafe for TryCaptureWithoutDebugimpl UnwindSafe for TryFromCharErrorimpl UnwindSafe for TryFromFloatSecsErrorimpl UnwindSafe for TryFromFloatSecsErrorKindimpl UnwindSafe for TryFromIntErrorimpl UnwindSafe for TryFromSliceErrorimpl UnwindSafe for Tupleimpl UnwindSafe for TwoWaySearcherimpl UnwindSafe for Typeimpl UnwindSafe for TypeIdimpl UnwindSafe for TypeKindimpl UnwindSafe for U32NotAllOnesimpl UnwindSafe for U64NotAllOnesimpl UnwindSafe for UnsafeBytesToStrimpl UnwindSafe for UnwindActionArgimpl UnwindSafe for UnwindTerminateReasonimpl UnwindSafe for UsizeNoHighBitimpl UnwindSafe for Utf8BoundaryErrorimpl UnwindSafe for Utf8Errorimpl UnwindSafe for VaListInnerimpl UnwindSafe for VariantIdimpl UnwindSafe for Wakerimpl UnwindSafe for WideAesOutputimpl UnwindSafe for __m128impl UnwindSafe for __m128bhimpl UnwindSafe for __m128dimpl UnwindSafe for __m128himpl UnwindSafe for __m128iimpl UnwindSafe for __m256impl UnwindSafe for __m256bhimpl UnwindSafe for __m256dimpl UnwindSafe for __m256himpl UnwindSafe for __m256iimpl UnwindSafe for __m512impl UnwindSafe for __m512bhimpl UnwindSafe for __m512dimpl UnwindSafe for __m512himpl UnwindSafe for __m512iimpl UnwindSafe for __tile1024iimpl UnwindSafe for __v16i16impl UnwindSafe for __v16i8impl UnwindSafe for __v16u16impl UnwindSafe for __v16u8impl UnwindSafe for __v2f64impl UnwindSafe for __v2i64impl UnwindSafe for __v2u64impl UnwindSafe for __v32i8impl UnwindSafe for __v32u8impl UnwindSafe for __v4f32impl UnwindSafe for __v4f64impl UnwindSafe for __v4i32impl UnwindSafe for __v4i64impl UnwindSafe for __v4u32impl UnwindSafe for __v4u64impl UnwindSafe for __v8f32impl UnwindSafe for __v8i16impl UnwindSafe for __v8i32impl UnwindSafe for __v8u16impl UnwindSafe for __v8u32impl UnwindSafe for bf16impl UnwindSafe for c_voidimpl UnwindSafe for f16x2impl UnwindSafe for float16x4_timpl UnwindSafe for float16x4x2_timpl UnwindSafe for float16x4x3_timpl UnwindSafe for float16x4x4_timpl UnwindSafe for float16x8_timpl UnwindSafe for float16x8x2_timpl UnwindSafe for float16x8x3_timpl UnwindSafe for float16x8x4_timpl UnwindSafe for float32x2_timpl UnwindSafe for float32x2x2_timpl UnwindSafe for float32x2x3_timpl UnwindSafe for float32x2x4_timpl UnwindSafe for float32x4_timpl UnwindSafe for float32x4x2_timpl UnwindSafe for float32x4x3_timpl UnwindSafe for float32x4x4_timpl UnwindSafe for float64x1_timpl UnwindSafe for float64x1x2_timpl UnwindSafe for float64x1x3_timpl UnwindSafe for float64x1x4_timpl UnwindSafe for float64x2_timpl UnwindSafe for float64x2x2_timpl UnwindSafe for float64x2x3_timpl UnwindSafe for float64x2x4_timpl UnwindSafe for int16x4_timpl UnwindSafe for int16x4x2_timpl UnwindSafe for int16x4x3_timpl UnwindSafe for int16x4x4_timpl UnwindSafe for int16x8_timpl UnwindSafe for int16x8x2_timpl UnwindSafe for int16x8x3_timpl UnwindSafe for int16x8x4_timpl UnwindSafe for int32x2_timpl UnwindSafe for int32x2x2_timpl UnwindSafe for int32x2x3_timpl UnwindSafe for int32x2x4_timpl UnwindSafe for int32x4_timpl UnwindSafe for int32x4x2_timpl UnwindSafe for int32x4x3_timpl UnwindSafe for int32x4x4_timpl UnwindSafe for int64x1_timpl UnwindSafe for int64x1x2_timpl UnwindSafe for int64x1x3_timpl UnwindSafe for int64x1x4_timpl UnwindSafe for int64x2_timpl UnwindSafe for int64x2x2_timpl UnwindSafe for int64x2x3_timpl UnwindSafe for int64x2x4_timpl UnwindSafe for int8x16_timpl UnwindSafe for int8x16x2_timpl UnwindSafe for int8x16x3_timpl UnwindSafe for int8x16x4_timpl UnwindSafe for int8x8_timpl UnwindSafe for int8x8x2_timpl UnwindSafe for int8x8x3_timpl UnwindSafe for int8x8x4_timpl UnwindSafe for iovecimpl UnwindSafe for m128impl UnwindSafe for m128dimpl UnwindSafe for m128iimpl UnwindSafe for m256impl UnwindSafe for m256dimpl UnwindSafe for m256iimpl UnwindSafe for nxv2i16impl UnwindSafe for nxv2i32impl UnwindSafe for nxv2i8impl UnwindSafe for nxv2u16impl UnwindSafe for nxv2u32impl UnwindSafe for nxv2u8impl UnwindSafe for nxv4i16impl UnwindSafe for nxv4i8impl UnwindSafe for nxv4u16impl UnwindSafe for nxv4u8impl UnwindSafe for nxv8i8impl UnwindSafe for nxv8u8impl UnwindSafe for objc_classimpl UnwindSafe for objc_selectorimpl UnwindSafe for poly16x4_timpl UnwindSafe for poly16x4x2_timpl UnwindSafe for poly16x4x3_timpl UnwindSafe for poly16x4x4_timpl UnwindSafe for poly16x8_timpl UnwindSafe for poly16x8x2_timpl UnwindSafe for poly16x8x3_timpl UnwindSafe for poly16x8x4_timpl UnwindSafe for poly64x1_timpl UnwindSafe for poly64x1x2_timpl UnwindSafe for poly64x1x3_timpl UnwindSafe for poly64x1x4_timpl UnwindSafe for poly64x2_timpl UnwindSafe for poly64x2x2_timpl UnwindSafe for poly64x2x3_timpl UnwindSafe for poly64x2x4_timpl UnwindSafe for poly8x16_timpl UnwindSafe for poly8x16x2_timpl UnwindSafe for poly8x16x3_timpl UnwindSafe for poly8x16x4_timpl UnwindSafe for poly8x8_timpl UnwindSafe for poly8x8x2_timpl UnwindSafe for poly8x8x3_timpl UnwindSafe for poly8x8x4_timpl UnwindSafe for svbool2_timpl UnwindSafe for svbool4_timpl UnwindSafe for svbool8_timpl UnwindSafe for svbool_timpl UnwindSafe for svfloat32_timpl UnwindSafe for svfloat32x2_timpl UnwindSafe for svfloat32x3_timpl UnwindSafe for svfloat32x4_timpl UnwindSafe for svfloat64_timpl UnwindSafe for svfloat64x2_timpl UnwindSafe for svfloat64x3_timpl UnwindSafe for svfloat64x4_timpl UnwindSafe for svint16_timpl UnwindSafe for svint16x2_timpl UnwindSafe for svint16x3_timpl UnwindSafe for svint16x4_timpl UnwindSafe for svint32_timpl UnwindSafe for svint32x2_timpl UnwindSafe for svint32x3_timpl UnwindSafe for svint32x4_timpl UnwindSafe for svint64_timpl UnwindSafe for svint64x2_timpl UnwindSafe for svint64x3_timpl UnwindSafe for svint64x4_timpl UnwindSafe for svint8_timpl UnwindSafe for svint8x2_timpl UnwindSafe for svint8x3_timpl UnwindSafe for svint8x4_timpl UnwindSafe for svpatternimpl UnwindSafe for svprfopimpl UnwindSafe for svuint16_timpl UnwindSafe for svuint16x2_timpl UnwindSafe for svuint16x3_timpl UnwindSafe for svuint16x4_timpl UnwindSafe for svuint32_timpl UnwindSafe for svuint32x2_timpl UnwindSafe for svuint32x3_timpl UnwindSafe for svuint32x4_timpl UnwindSafe for svuint64_timpl UnwindSafe for svuint64x2_timpl UnwindSafe for svuint64x3_timpl UnwindSafe for svuint64x4_timpl UnwindSafe for svuint8_timpl UnwindSafe for svuint8x2_timpl UnwindSafe for svuint8x3_timpl UnwindSafe for svuint8x4_timpl UnwindSafe for uint16x4_timpl UnwindSafe for uint16x4x2_timpl UnwindSafe for uint16x4x3_timpl UnwindSafe for uint16x4x4_timpl UnwindSafe for uint16x8_timpl UnwindSafe for uint16x8x2_timpl UnwindSafe for uint16x8x3_timpl UnwindSafe for uint16x8x4_timpl UnwindSafe for uint32x2_timpl UnwindSafe for uint32x2x2_timpl UnwindSafe for uint32x2x3_timpl UnwindSafe for uint32x2x4_timpl UnwindSafe for uint32x4_timpl UnwindSafe for uint32x4x2_timpl UnwindSafe for uint32x4x3_timpl UnwindSafe for uint32x4x4_timpl UnwindSafe for uint64x1_timpl UnwindSafe for uint64x1x2_timpl UnwindSafe for uint64x1x3_timpl UnwindSafe for uint64x1x4_timpl UnwindSafe for uint64x2_timpl UnwindSafe for uint64x2x2_timpl UnwindSafe for uint64x2x3_timpl UnwindSafe for uint64x2x4_timpl UnwindSafe for uint8x16_timpl UnwindSafe for uint8x16x2_timpl UnwindSafe for uint8x16x3_timpl UnwindSafe for uint8x16x4_timpl UnwindSafe for uint8x8_timpl UnwindSafe for uint8x8x2_timpl UnwindSafe for uint8x8x3_timpl UnwindSafe for uint8x8x4_timpl UnwindSafe for v128impl UnwindSafe for vector_bool_charimpl UnwindSafe for vector_bool_charimpl UnwindSafe for vector_bool_intimpl UnwindSafe for vector_bool_intimpl UnwindSafe for vector_bool_longimpl UnwindSafe for vector_bool_long_longimpl UnwindSafe for vector_bool_shortimpl UnwindSafe for vector_bool_shortimpl UnwindSafe for vector_doubleimpl UnwindSafe for vector_doubleimpl UnwindSafe for vector_floatimpl UnwindSafe for vector_floatimpl UnwindSafe for vector_signed_charimpl UnwindSafe for vector_signed_charimpl UnwindSafe for vector_signed_intimpl UnwindSafe for vector_signed_intimpl UnwindSafe for vector_signed_longimpl UnwindSafe for vector_signed_long_longimpl UnwindSafe for vector_signed_shortimpl UnwindSafe for vector_signed_shortimpl UnwindSafe for vector_unsigned_charimpl UnwindSafe for vector_unsigned_charimpl UnwindSafe for vector_unsigned_intimpl UnwindSafe for vector_unsigned_intimpl UnwindSafe for vector_unsigned_longimpl UnwindSafe for vector_unsigned_long_longimpl UnwindSafe for vector_unsigned_shortimpl UnwindSafe for vector_unsigned_shortimpl<'a> !UnwindSafe for ContextBuilder<'a>impl<'a> !UnwindSafe for DisplayBuffer<'a>impl<'a> !UnwindSafe for ExtData<'a>impl<'a> !UnwindSafe for Formatter<'a>impl<'a> !UnwindSafe for IoSliceMut<'a>impl<'a> !UnwindSafe for IoSliceMut<'a>impl<'a> !UnwindSafe for Request<'a>impl<'a> !UnwindSafe for Source<'a>impl<'a> UnwindSafe for Argument<'a>impl<'a> UnwindSafe for ArgumentType<'a>impl<'a> UnwindSafe for Arguments<'a>impl<'a> UnwindSafe for Bytes<'a>impl<'a> UnwindSafe for Bytes<'a>impl<'a> UnwindSafe for CharIndices<'a>impl<'a> UnwindSafe for CharSearcher<'a>impl<'a> UnwindSafe for Chars<'a>impl<'a> UnwindSafe for Context<'a>impl<'a> UnwindSafe for Debug<'a>impl<'a> UnwindSafe for EncodeUtf16<'a>impl<'a> UnwindSafe for EscapeAscii<'a>impl<'a> UnwindSafe for EscapeDebug<'a>impl<'a> UnwindSafe for EscapeDefault<'a>impl<'a> UnwindSafe for EscapeUnicode<'a>impl<'a> UnwindSafe for Formatted<'a>impl<'a> UnwindSafe for IoSlice<'a>impl<'a> UnwindSafe for IoSlice<'a>impl<'a> UnwindSafe for Lines<'a>impl<'a> UnwindSafe for LinesAny<'a>impl<'a> UnwindSafe for Location<'a>impl<'a> UnwindSafe for PanicInfo<'a>impl<'a> UnwindSafe for PanicMessage<'a>impl<'a> UnwindSafe for Parser<'a>impl<'a> UnwindSafe for Part<'a>impl<'a> UnwindSafe for PhantomContravariantLifetime<'a>impl<'a> UnwindSafe for PhantomCovariantLifetime<'a>impl<'a> UnwindSafe for PhantomInvariantLifetime<'a>impl<'a> UnwindSafe for SplitAsciiWhitespace<'a>impl<'a> UnwindSafe for SplitWhitespace<'a>impl<'a> UnwindSafe for Utf8Chunk<'a>impl<'a> UnwindSafe for Utf8Chunks<'a>impl<'a> UnwindSafe for Utf8Pattern<'a>impl<'a> UnwindSafe for VaList<'a>impl<'a, 'b> !UnwindSafe for DebugInner<'a, 'b>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, 'b, const N: usize> UnwindSafe for CharArrayRefSearcher<'a, 'b, N> where <MultiCharEqPattern<&'b [char; N]> as Pattern>::Searcher<'a>: UnwindSafe,impl<'a, A> !UnwindSafe for IterMut<'a, A>impl<'a, A> UnwindSafe for Iter<'a, A> where Item<&'a A>: UnwindSafe,impl<'a, C> UnwindSafe for MultiCharEqSearcher<'a, C> where C: UnwindSafe,impl<'a, F> UnwindSafe for CharPredicateSearcher<'a, F> where <MultiCharEqPattern<F> as Pattern>::Searcher<'a>: UnwindSafe,impl<'a, I> !UnwindSafe for ByRefSized<'a, I>impl<'a, I> UnwindSafe for TaggedOption<'a, I> where Option<<I as Type<'a>>::Reified>: UnwindSafe,impl<'a, I, R> !UnwindSafe for GenericShunt<'a, I, R>impl<'a, P> UnwindSafe for MatchIndices<'a, P> where MatchIndicesInternal<'a, P>: UnwindSafe,impl<'a, P> UnwindSafe for MatchIndicesInternal<'a, P> where <P as Pattern>::Searcher<'a>: UnwindSafe,impl<'a, P> UnwindSafe for Matches<'a, P> where MatchesInternal<'a, P>: UnwindSafe,impl<'a, P> UnwindSafe for MatchesInternal<'a, P> where <P as Pattern>::Searcher<'a>: UnwindSafe,impl<'a, P> UnwindSafe for RMatchIndices<'a, P> where MatchIndicesInternal<'a, P>: UnwindSafe,impl<'a, P> UnwindSafe for RMatches<'a, P> where MatchesInternal<'a, P>: UnwindSafe,impl<'a, P> UnwindSafe for RSplit<'a, P> where SplitInternal<'a, P>: UnwindSafe,impl<'a, P> UnwindSafe for RSplitN<'a, P> where SplitNInternal<'a, P>: UnwindSafe,impl<'a, P> UnwindSafe for RSplitTerminator<'a, P> where SplitInternal<'a, P>: UnwindSafe,impl<'a, P> UnwindSafe for Split<'a, P> where SplitInternal<'a, P>: UnwindSafe,impl<'a, P> UnwindSafe for SplitInclusive<'a, P> where SplitInternal<'a, P>: UnwindSafe,impl<'a, P> UnwindSafe for SplitInternal<'a, P> where <P as Pattern>::Searcher<'a>: UnwindSafe,impl<'a, P> UnwindSafe for SplitN<'a, P> where SplitNInternal<'a, P>: UnwindSafe,impl<'a, P> UnwindSafe for SplitNInternal<'a, P> where SplitInternal<'a, P>: UnwindSafe,impl<'a, P> UnwindSafe for SplitTerminator<'a, P> where SplitInternal<'a, P>: UnwindSafe,impl<'a, T> !UnwindSafe for ChunksExactMut<'a, T>impl<'a, T> !UnwindSafe for ChunksMut<'a, T>impl<'a, T> !UnwindSafe for Guard<'a, T>impl<'a, T> !UnwindSafe for Guard<'a, T>impl<'a, T> !UnwindSafe for GuardBack<'a, T>impl<'a, T> !UnwindSafe for InitializingSlice<'a, T>impl<'a, T> !UnwindSafe for IterMut<'a, T>impl<'a, T> !UnwindSafe for IterMut<'a, T>impl<'a, T> !UnwindSafe for RChunksExactMut<'a, T>impl<'a, T> !UnwindSafe for RChunksMut<'a, T>impl<'a, T> UnwindSafe for BorrowedCursor<'a, T> where NonNull<MaybeUninit<T>>: UnwindSafe, NonNull<BorrowedBuf<'a, T>>: UnwindSafe,impl<'a, T> UnwindSafe for Chunks<'a, T> where &'a [T]: UnwindSafe,impl<'a, T> UnwindSafe for ChunksExact<'a, T> where &'a [T]: UnwindSafe + UnwindSafe,impl<'a, T> UnwindSafe for Iter<'a, T> where NonNull<T>: UnwindSafe, *const T: UnwindSafe, PhantomData<&'a T>: UnwindSafe,impl<'a, T> UnwindSafe for Iter<'a, T> where Option<&'a T>: UnwindSafe,impl<'a, T> UnwindSafe for RChunks<'a, T> where &'a [T]: UnwindSafe,impl<'a, T> UnwindSafe for RChunksExact<'a, T> where &'a [T]: UnwindSafe + UnwindSafe,impl<'a, T> UnwindSafe for Windows<'a, T> where &'a [T]: UnwindSafe,impl<'a, T, P> !UnwindSafe for ChunkByMut<'a, T, P>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 SplitInclusiveMut<'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 ChunkBy<'a, T, P> where &'a [T]: UnwindSafe, P: UnwindSafe,impl<'a, T, P> UnwindSafe for RSplit<'a, T, P> where Split<'a, T, P>: UnwindSafe,impl<'a, T, P> UnwindSafe for RSplitN<'a, T, P> where GenericSplitN<RSplit<'a, T, P>>: UnwindSafe,impl<'a, T, P> UnwindSafe for Split<'a, T, P> where &'a [T]: UnwindSafe, P: UnwindSafe,impl<'a, T, P> UnwindSafe for SplitInclusive<'a, T, P> where &'a [T]: UnwindSafe, P: UnwindSafe,impl<'a, T, P> UnwindSafe for SplitN<'a, T, P> where GenericSplitN<Split<'a, T, P>>: UnwindSafe,impl<'a, T, const N: usize> UnwindSafe for ArrayWindows<'a, T, N> where &'a [T]: UnwindSafe,impl<'a, const N: usize> UnwindSafe for CharArraySearcher<'a, N> where <MultiCharEqPattern<[char; N]> as Pattern>::Searcher<'a>: UnwindSafe,impl<'b> !UnwindSafe for BorrowRef<'b>impl<'b> !UnwindSafe for BorrowRefMut<'b>impl<'b, T> !UnwindSafe for Ref<'b, T>impl<'b, T> !UnwindSafe for RefMut<'b, T>impl<'buf, 'state> !UnwindSafe for PadAdapter<'buf, 'state>impl<'data, T> !UnwindSafe for BorrowedBuf<'data, T>impl<'l, 'f, T, F> !UnwindSafe for Drain<'l, 'f, T, F>impl<A> UnwindSafe for IntoIter<A> where Item<A>: UnwindSafe,impl<A> UnwindSafe for Item<A> where Option<A>: UnwindSafe,impl<A> UnwindSafe for OptionFlatten<A> where Option<A>: UnwindSafe,impl<A> UnwindSafe for RangeFromIter<A> where A: UnwindSafe,impl<A> UnwindSafe for RangeInclusiveIter<A> where RangeInclusive<A>: UnwindSafe,impl<A> UnwindSafe for RangeIter<A> where Range<A>: UnwindSafe,impl<A> UnwindSafe for Repeat<A> where A: UnwindSafe,impl<A> UnwindSafe for RepeatN<A> where Option<RepeatNInner<A>>: UnwindSafe,impl<A, B> UnwindSafe for Chain<A, B> where Option<A>: UnwindSafe, Option<B>: UnwindSafe,impl<A, B> UnwindSafe for Zip<A, B> where A: UnwindSafe, B: UnwindSafe,impl<B, C> UnwindSafe for ControlFlow<B, C> where C: UnwindSafe, B: UnwindSafe,impl<C> UnwindSafe for ErrorData<C> where C: UnwindSafe,impl<C> UnwindSafe for MultiCharEqPattern<C> where C: UnwindSafe,impl<DATA> UnwindSafe for PolymorphicIter<DATA> where DATA: UnwindSafe + ?Sized,impl<Dyn> !UnwindSafe for DynMetadata<Dyn>impl<E> UnwindSafe for Tagged<E> where E: UnwindSafe + ?Sized,impl<E, M> UnwindSafe for Capture<E, M> where Option<E>: UnwindSafe, PhantomData<M>: UnwindSafe,impl<F> UnwindSafe for DebugOnce<F> where Cell<Option<F>>: UnwindSafe,impl<F> UnwindSafe for FromFn<F> where F: UnwindSafe,impl<F> UnwindSafe for FromFn<F> where F: UnwindSafe,impl<F> UnwindSafe for MaybeDone<F> where F: UnwindSafe, <F as Future>::Output: UnwindSafe,impl<F> UnwindSafe for OnceWith<F> where Option<F>: UnwindSafe,impl<F> UnwindSafe for PollFn<F> where F: UnwindSafe,impl<F> UnwindSafe for RepeatWith<F> where F: UnwindSafe,impl<G> UnwindSafe for FromCoroutine<G> where G: UnwindSafe,impl<H> UnwindSafe for BuildHasherDefault<H> where PhantomData<fn() -> H>: 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 + UnwindSafe,impl<I> UnwindSafe for DecodeUtf16<I> where I: UnwindSafe,impl<I> UnwindSafe for Enumerate<I> where I: UnwindSafe,impl<I> UnwindSafe for Flatten<I> where FlattenCompat<I, <<I as Iterator>::Item as IntoIterator>::IntoIter>: UnwindSafe,impl<I> UnwindSafe for FromIter<I> where I: UnwindSafe,impl<I> UnwindSafe for Fuse<I> where Option<I>: UnwindSafe,impl<I> UnwindSafe for GenericSplitN<I> where I: UnwindSafe,impl<I> UnwindSafe for Intersperse<I> where <I as Iterator>::Item: Sized + UnwindSafe, Option<<I as Iterator>::Item>: UnwindSafe, I: UnwindSafe,impl<I> UnwindSafe for Peekable<I> where I: UnwindSafe, Option<Option<<I as Iterator>::Item>>: UnwindSafe,impl<I> UnwindSafe for Ref<I> where PhantomData<I>: UnwindSafe,impl<I> UnwindSafe for Skip<I> where I: UnwindSafe,impl<I> UnwindSafe for StepBy<I> where I: UnwindSafe,impl<I> UnwindSafe for Take<I> where I: UnwindSafe,impl<I, F> UnwindSafe for FilterMap<I, F> where I: UnwindSafe, F: UnwindSafe,impl<I, F> UnwindSafe for Inspect<I, F> where I: UnwindSafe, F: UnwindSafe,impl<I, F> UnwindSafe for Map<I, F> where I: UnwindSafe, F: UnwindSafe,impl<I, F, const N: usize> UnwindSafe for MapWindows<I, F, N> where F: UnwindSafe, MapWindowsInner<I, N>: UnwindSafe,impl<I, G> UnwindSafe for IntersperseWith<I, G> where G: UnwindSafe, Option<<I as Iterator>::Item>: UnwindSafe, I: UnwindSafe,impl<I, P> UnwindSafe for Filter<I, P> where I: UnwindSafe, P: UnwindSafe,impl<I, P> UnwindSafe for MapWhile<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 I: UnwindSafe, F: UnwindSafe, St: UnwindSafe,impl<I, U> UnwindSafe for FlattenCompat<I, U> where Fuse<I>: UnwindSafe, Option<U>: UnwindSafe + UnwindSafe,impl<I, U, F> UnwindSafe for FlatMap<I, U, F> where FlattenCompat<Map<I, F>, <U as IntoIterator>::IntoIter>: UnwindSafe,impl<I, const N: usize> UnwindSafe for ArrayChunks<I, N> where I: UnwindSafe, Option<IntoIter<<I as Iterator>::Item, N>>: UnwindSafe,impl<I, const N: usize> UnwindSafe for MapWindowsInner<I, N> where I: UnwindSafe, Option<Buffer<<I as Iterator>::Item, N>>: UnwindSafe,impl<Idx> UnwindSafe for Clamp<Idx> where Idx: UnwindSafe,impl<Idx> UnwindSafe for Range<Idx> where Idx: UnwindSafe + UnwindSafe,impl<Idx> UnwindSafe for Range<Idx> where Idx: UnwindSafe + UnwindSafe,impl<Idx> UnwindSafe for RangeFrom<Idx> where Idx: UnwindSafe,impl<Idx> UnwindSafe for RangeFrom<Idx> where Idx: UnwindSafe,impl<Idx> UnwindSafe for RangeInclusive<Idx> where Idx: UnwindSafe + UnwindSafe,impl<Idx> UnwindSafe for RangeInclusive<Idx> where Idx: UnwindSafe + UnwindSafe,impl<Idx> UnwindSafe for RangeTo<Idx> where Idx: UnwindSafe,impl<Idx> UnwindSafe for RangeToInclusive<Idx> where Idx: UnwindSafe,impl<Idx> UnwindSafe for RangeToInclusive<Idx> where Idx: UnwindSafe,impl<K, V> UnwindSafe for KeyAndValue<K, V> where K: UnwindSafe, V: UnwindSafe,impl<P> UnwindSafe for MaybeDangling<P> where P: UnwindSafe + ?Sized,impl<Ptr> UnwindSafe for Pin<Ptr> where Ptr: UnwindSafe,impl<Ptr> UnwindSafe for PinHelper<Ptr> where Ptr: UnwindSafe,impl<S> UnwindSafe for Hasher<S> where PhantomData<S>: UnwindSafe,impl<T> !UnwindSafe for TraitImpl<T>impl<T> UnwindSafe for Align1<T> where T: UnwindSafe,impl<T> UnwindSafe for Align16<T> where T: UnwindSafe,impl<T> UnwindSafe for Align2<T> where T: UnwindSafe,impl<T> UnwindSafe for Align4<T> where T: UnwindSafe,impl<T> UnwindSafe for Align8<T> where T: UnwindSafe,impl<T> UnwindSafe for AssertUnwindSafe<T>impl<T> UnwindSafe for Atomic<T> where UnsafeCell<<T as AtomicPrimitive>::Storage>: UnwindSafe,impl<T> UnwindSafe for Bound<T> where T: UnwindSafe + UnwindSafe,impl<T> UnwindSafe for Cell<T> where UnsafeCell<T>: UnwindSafe, T: ?Sized,impl<T> UnwindSafe for Complex<T> where T: UnwindSafe + UnwindSafe,impl<T> UnwindSafe for CopyOnDrop<T> where *const T: UnwindSafe, *mut T: UnwindSafe,impl<T> UnwindSafe for CovariantUnsafeCell<T> where UnsafeCell<T>: UnwindSafe, T: ?Sized,impl<T> UnwindSafe for Cursor<T> where T: UnwindSafe,impl<T> UnwindSafe for Discriminant<T> where <T as DiscriminantKind>::Discriminant: UnwindSafe,impl<T> UnwindSafe for Empty<T> where PhantomData<fn() -> T>: UnwindSafe,impl<T> UnwindSafe for GapGuard<T> where *mut T: UnwindSafe, ManuallyDrop<T>: UnwindSafe,impl<T> UnwindSafe for GapGuardRaw<T> where *mut T: UnwindSafe + UnwindSafe,impl<T> UnwindSafe for IntoIter<T> where Option<T>: UnwindSafe,impl<T> UnwindSafe for ManuallyDrop<T> where MaybeDangling<T>: UnwindSafe, T: ?Sized,impl<T> UnwindSafe for MaybeSizedValue<T> where PhantomData<T>: UnwindSafe, T: ?Sized,impl<T> UnwindSafe for MaybeUninit<T> where ManuallyDrop<T>: UnwindSafe,impl<T> UnwindSafe for MergeState<T> where *mut T: UnwindSafe + UnwindSafe + UnwindSafe,impl<T> UnwindSafe for NeverShortCircuit<T> where T: UnwindSafe,impl<T> UnwindSafe for NonZero<T> where T: ZeroablePrimitive + UnwindSafe,impl<T> UnwindSafe for NumBuffer<T> where <T as NumBufferTrait>::Buf: UnwindSafe, PhantomData<T>: UnwindSafe,impl<T> UnwindSafe for Once<T> where IntoIter<T>: UnwindSafe,impl<T> UnwindSafe for OnceCell<T> where UnsafeCell<Option<T>>: UnwindSafe,impl<T> UnwindSafe for Option<T> where T: UnwindSafe,impl<T> UnwindSafe for PartitionState<T> where *mut T: UnwindSafe + UnwindSafe, *const T: UnwindSafe,impl<T> UnwindSafe for PartitionState<T> where *mut T: UnwindSafe, GapGuardRaw<T>: UnwindSafe,impl<T> UnwindSafe for Pending<T> where PhantomData<fn() -> T>: UnwindSafe,impl<T> UnwindSafe for PhantomContravariant<T> where PhantomData<fn(T)>: UnwindSafe, T: ?Sized,impl<T> UnwindSafe for PhantomCovariant<T> where PhantomData<fn() -> T>: UnwindSafe, T: ?Sized,impl<T> UnwindSafe for PhantomData<T> where T: ?Sized,impl<T> UnwindSafe for PhantomInvariant<T> where PhantomData<fn(T) -> T>: UnwindSafe, T: ?Sized,impl<T> UnwindSafe for Poll<T> where T: UnwindSafe,impl<T> UnwindSafe for Ready<T> where Option<T>: UnwindSafe,impl<T> UnwindSafe for RefCell<T> where UnsafeCell<T>: UnwindSafe, T: ?Sized,impl<T> UnwindSafe for RepeatNInner<T> where T: UnwindSafe,impl<T> UnwindSafe for Rev<T> where T: UnwindSafe,impl<T> UnwindSafe for Reverse<T> where T: UnwindSafe,impl<T> UnwindSafe for Saturating<T> where T: UnwindSafe,impl<T> UnwindSafe for SyncUnsafeCell<T> where UnsafeCell<T>: UnwindSafe, T: ?Sized,impl<T> UnwindSafe for SyncView<T> where T: UnwindSafe + ?Sized,impl<T> UnwindSafe for Take<T> where T: UnwindSafe,impl<T> UnwindSafe for Unaligned<T> where T: UnwindSafe,impl<T> UnwindSafe for UnsafeCell<T> where T: UnwindSafe + ?Sized,impl<T> UnwindSafe for UnsafePinned<T> where UnsafeCell<T>: UnwindSafe, T: ?Sized,impl<T> UnwindSafe for Value<T> where PhantomData<T>: UnwindSafe,impl<T> UnwindSafe for Wrapper<T> where T: UnwindSafe,impl<T> UnwindSafe for Wrapping<T> where T: UnwindSafe,impl<T> UnwindSafe for Yeet<T> where T: UnwindSafe,impl<T, E> UnwindSafe for Result<T, E> where T: UnwindSafe, E: UnwindSafe,impl<T, F> UnwindSafe for DropGuard<T, F> where ManuallyDrop<T>: UnwindSafe, ManuallyDrop<F>: UnwindSafe,impl<T, F> UnwindSafe for LazyCell<T, F> where UnsafeCell<State<T, F>>: UnwindSafe,impl<T, F> UnwindSafe for State<T, F> where F: UnwindSafe, T: UnwindSafe,impl<T, F> UnwindSafe for Successors<T, F> where Option<T>: UnwindSafe, F: UnwindSafe,impl<T, U> UnwindSafe for Chain<T, U> where T: UnwindSafe, U: UnwindSafe,impl<T, U> UnwindSafe for PackedTuple<T, U> where T: UnwindSafe, U: UnwindSafe,impl<T, const N: usize> UnwindSafe for AlignedStorage<T, N> where [T; 0]: UnwindSafe, [MaybeUninit<u8>; N]: UnwindSafe,impl<T, const N: usize> UnwindSafe for Buffer<T, N> where [[MaybeUninit<T>; N]; 2]: UnwindSafe,impl<T, const N: usize> UnwindSafe for IntoIter<T, N> where ManuallyDrop<PolymorphicIter<[MaybeUninit<T>; N]>>: UnwindSafe,impl<T, const N: usize> UnwindSafe for Mask<T, N> where Simd<T, N>: UnwindSafe,impl<T, const N: usize> UnwindSafe for Simd<T, N> where [T; N]: UnwindSafe,impl<T, const N: usize> UnwindSafe for Simd<T, N> where [T; N]: UnwindSafe,impl<T, const N: usize> UnwindSafe for SimdM<T, N> where [T; N]: UnwindSafe,impl<T, const VARIANT: u32, const FIELD: u32> UnwindSafe for FieldRepresentingType<T, VARIANT, FIELD> where PhantomData<fn(T) -> T>: UnwindSafe, T: ?Sized,impl<T: PointeeSized> !UnwindSafe for &mut Timpl<T: RefUnwindSafe + PointeeSized> UnwindSafe for &Timpl<T: RefUnwindSafe + PointeeSized> UnwindSafe for *const Timpl<T: RefUnwindSafe + PointeeSized> UnwindSafe for *mut Timpl<T: RefUnwindSafe + PointeeSized> UnwindSafe for NonNull<T>impl<T: UnwindSafe + PointeeSized> UnwindSafe for Unique<T>impl<Y, R> UnwindSafe for CoroutineState<Y, R> where Y: UnwindSafe, R: UnwindSafe,impl<const LEN: usize> UnwindSafe for SimdShuffleIdx<LEN> where [u32; LEN]: UnwindSafe,impl<const N: usize> UnwindSafe for MaybeEscapedCharacter<N> where [AsciiChar; N]: UnwindSafe,impl<const N: usize> UnwindSafe for ReverseMask<N> where [u32; N]: UnwindSafe,impl<const N: usize> UnwindSafe for ShuffleMask<N> where [u32; N]: UnwindSafe,impl<const N: usize, ESCAPING> UnwindSafe for EscapeIterInner<N, ESCAPING> where MaybeEscapedCharacter<N>: UnwindSafe, PhantomData<ESCAPING>: UnwindSafe,