Rollup merge of #95534 - jyn514:std-mem-copy, r=joshtriplett

Add `core::mem::copy` to complement `core::mem::drop`.

This is useful for combinators. I didn't add `clone` since you can already
use `Clone::clone` in its place; copy has no such corresponding function.
This commit is contained in:
Yuki Okushi 2022-06-20 07:37:40 +09:00 committed by GitHub
commit 9d4e08e725
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -973,6 +973,28 @@ pub const fn replace<T>(dest: &mut T, src: T) -> T {
#[cfg_attr(not(test), rustc_diagnostic_item = "mem_drop")] #[cfg_attr(not(test), rustc_diagnostic_item = "mem_drop")]
pub fn drop<T>(_x: T) {} pub fn drop<T>(_x: T) {}
/// Bitwise-copies a value.
///
/// This function is not magic; it is literally defined as
/// ```
/// pub fn copy<T: Copy>(x: &T) -> T { *x }
/// ```
///
/// It is useful when you want to pass a function pointer to a combinator, rather than defining a new closure.
///
/// Example:
/// ```
/// #![feature(mem_copy_fn)]
/// use core::mem::copy;
/// let result_from_ffi_function: Result<(), &i32> = Err(&1);
/// let result_copied: Result<(), i32> = result_from_ffi_function.map_err(copy);
/// ```
#[inline]
#[unstable(feature = "mem_copy_fn", issue = "98262")]
pub fn copy<T: Copy>(x: &T) -> T {
*x
}
/// Interprets `src` as having type `&U`, and then reads `src` without moving /// Interprets `src` as having type `&U`, and then reads `src` without moving
/// the contained value. /// the contained value.
/// ///