Rollup merge of #90741 - mbartlett21:patch-4, r=dtolnay

Const `Option::cloned`

This constifies the two `Option::cloned` functions, bounded on `~const Clone`.
This commit is contained in:
Matthias Krüger 2021-12-11 17:35:25 +01:00 committed by GitHub
commit 7fbaf33a3c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1523,8 +1523,15 @@ impl<T: Clone> Option<&T> {
/// ```
#[must_use = "`self` will be dropped if the result is not used"]
#[stable(feature = "rust1", since = "1.0.0")]
pub fn cloned(self) -> Option<T> {
self.map(|t| t.clone())
#[rustc_const_unstable(feature = "const_option_cloned", issue = "91582")]
pub const fn cloned(self) -> Option<T>
where
T: ~const Clone,
{
match self {
Some(t) => Some(t.clone()),
None => None,
}
}
}
@ -1541,9 +1548,17 @@ impl<T: Clone> Option<&mut T> {
/// let cloned = opt_x.cloned();
/// assert_eq!(cloned, Some(12));
/// ```
#[must_use = "`self` will be dropped if the result is not used"]
#[stable(since = "1.26.0", feature = "option_ref_mut_cloned")]
pub fn cloned(self) -> Option<T> {
self.map(|t| t.clone())
#[rustc_const_unstable(feature = "const_option_cloned", issue = "91582")]
pub const fn cloned(self) -> Option<T>
where
T: ~const Clone,
{
match self {
Some(t) => Some(t.clone()),
None => None,
}
}
}