@@ -1452,6 +1452,58 @@ impl<T, const N: usize> MaybeUninit<[T; N]> {
1452
1452
}
1453
1453
}
1454
1454
1455
+ #[ stable( feature = "more_conversion_trait_impls" , since = "CURRENT_RUSTC_VERSION" ) ]
1456
+ impl < T , const N : usize > From < [ MaybeUninit < T > ; N ] > for MaybeUninit < [ T ; N ] > {
1457
+ #[ inline( always) ]
1458
+ fn from ( arr : [ MaybeUninit < T > ; N ] ) -> Self {
1459
+ // SAFETY: T and MaybeUninit<T> have the same layout
1460
+ unsafe { intrinsics:: transmute_unchecked ( arr) }
1461
+ }
1462
+ }
1463
+
1464
+ #[ stable( feature = "more_conversion_trait_impls" , since = "CURRENT_RUSTC_VERSION" ) ]
1465
+ impl < T , const N : usize > AsRef < [ MaybeUninit < T > ; N ] > for MaybeUninit < [ T ; N ] > {
1466
+ #[ inline( always) ]
1467
+ fn as_ref ( & self ) -> & [ MaybeUninit < T > ; N ] {
1468
+ // SAFETY: T and MaybeUninit<T> have the same layout
1469
+ unsafe { & * ( self as * const MaybeUninit < [ T ; N ] > as * const [ MaybeUninit < T > ; N ] ) }
1470
+ }
1471
+ }
1472
+
1473
+ #[ stable( feature = "more_conversion_trait_impls" , since = "CURRENT_RUSTC_VERSION" ) ]
1474
+ impl < T , const N : usize > AsRef < [ MaybeUninit < T > ] > for MaybeUninit < [ T ; N ] > {
1475
+ #[ inline( always) ]
1476
+ fn as_ref ( & self ) -> & [ MaybeUninit < T > ] {
1477
+ & * AsRef :: < [ MaybeUninit < T > ; N ] > :: as_ref ( self )
1478
+ }
1479
+ }
1480
+
1481
+ #[ stable( feature = "more_conversion_trait_impls" , since = "CURRENT_RUSTC_VERSION" ) ]
1482
+ impl < T , const N : usize > AsMut < [ MaybeUninit < T > ; N ] > for MaybeUninit < [ T ; N ] > {
1483
+ #[ inline( always) ]
1484
+ fn as_mut ( & mut self ) -> & mut [ MaybeUninit < T > ; N ] {
1485
+ // SAFETY: T and MaybeUninit<T> have the same layout
1486
+ unsafe { & mut * ( self as * mut MaybeUninit < [ T ; N ] > as * mut [ MaybeUninit < T > ; N ] ) }
1487
+ }
1488
+ }
1489
+
1490
+ #[ stable( feature = "more_conversion_trait_impls" , since = "CURRENT_RUSTC_VERSION" ) ]
1491
+ impl < T , const N : usize > AsMut < [ MaybeUninit < T > ] > for MaybeUninit < [ T ; N ] > {
1492
+ #[ inline( always) ]
1493
+ fn as_mut ( & mut self ) -> & mut [ MaybeUninit < T > ] {
1494
+ & mut * AsMut :: < [ MaybeUninit < T > ; N ] > :: as_mut ( self )
1495
+ }
1496
+ }
1497
+
1498
+ #[ stable( feature = "more_conversion_trait_impls" , since = "CURRENT_RUSTC_VERSION" ) ]
1499
+ impl < T , const N : usize > From < MaybeUninit < [ T ; N ] > > for [ MaybeUninit < T > ; N ] {
1500
+ #[ inline( always) ]
1501
+ fn from ( arr : MaybeUninit < [ T ; N ] > ) -> Self {
1502
+ // SAFETY: T and MaybeUninit<T> have the same layout
1503
+ unsafe { intrinsics:: transmute_unchecked ( arr) }
1504
+ }
1505
+ }
1506
+
1455
1507
impl < T , const N : usize > [ MaybeUninit < T > ; N ] {
1456
1508
/// Transposes a `[MaybeUninit<T>; N]` into a `MaybeUninit<[T; N]>`.
1457
1509
///
0 commit comments