Skip to content

Commit b16ea15

Browse files
committed
Add initial downcast_trait_mut impl
1 parent 46224d5 commit b16ea15

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

library/core/src/any.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -915,3 +915,21 @@ pub const fn downcast_trait<
915915
None => None,
916916
}
917917
}
918+
#[allow(missing_docs)]
919+
#[must_use]
920+
#[unstable(feature = "downcast_trait", issue = "69420")]
921+
pub const fn downcast_trait_mut<
922+
T: Any + 'static,
923+
U: ptr::Pointee<Metadata = ptr::DynMetadata<U>> + ?Sized + 'static,
924+
>(
925+
t: &mut T,
926+
) -> Option<&mut U> {
927+
let vtable: Option<ptr::DynMetadata<U>> = const { intrinsics::vtable_for::<T, U>() };
928+
match vtable {
929+
Some(dyn_metadata) => {
930+
let pointer = ptr::from_raw_parts_mut(t, dyn_metadata);
931+
Some(unsafe { &mut *pointer })
932+
}
933+
None => None,
934+
}
935+
}

0 commit comments

Comments
 (0)