# Allow MaybeUninit union fields?

**URL:** <https://internals.rust-lang.org/t/allow-maybeuninit-union-fields/20248>\
**Category:** Uncategorized\
**Created:** [February 2, 2024, 5:40pm UTC](https://internals.rust-lang.org/t/allow-maybeuninit-union-fields/20248 "2024-02-02T17:40:11Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sky9](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/sky9/32/12959_2.png) [@Sky9](https://internals.rust-lang.org/u/Sky9)\
**Post date:** [February 2, 2024, 5:40pm UTC](https://internals.rust-lang.org/t/allow-maybeuninit-union-fields/20248/1 "2024-02-02T17:40:11Z")

</div>

I was recently disappointed to find out that you cannot use `MaybeUninit` in union fields (if `T: !Copy`). Only `Copy` fields or fields wrapped in `ManuallyDrop` are allowed (or tuples/arrays of allowed types).

```rust
union Example<T> {
    // this is not allowed, must be ManuallyDrop<MaybeUninit<T>>
    inline: MaybeUninit<T>,
    alloc: *mut T,
}

```

`ManuallyDrop<MaybeUninit<T>>` is redundant as `MaybeUninit` already internally wraps `T` in `ManuallyDrop`. Nothing happens when `MaybeUninit` is dropped.

Could the rules be relaxed to allow `MaybeUninit` union fields?

Relevant Code:

> <https://github.com/rust-lang/rust/blob/bf3c6c5bed498f41ad815641319a1ad9bcecb8e8/compiler/rustc_hir_analysis/src/check/check.rs#L118-L120>

---

<div class="post-metadata">

**Author:** ![scottmcm](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/scottmcm/32/2355_2.png) [@scottmcm](https://internals.rust-lang.org/u/scottmcm)\
**Post date:** [February 2, 2024, 5:42pm UTC](https://internals.rust-lang.org/t/allow-maybeuninit-union-fields/20248/2 "2024-02-02T17:42:54Z")

</div>

Given that you're putting it in a `union` already, can you say why you want to have the union field be a `MaybeUninit<T>` rather than a `ManuallyDrop<T>`?

---

<div class="post-metadata">

**Author:** ![system](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/system/32/14092_2.png) [@system](https://internals.rust-lang.org/u/system)\
**Post date:** [May 2, 2024, 5:43pm UTC](https://internals.rust-lang.org/t/allow-maybeuninit-union-fields/20248/3 "2024-05-02T17:43:10Z")

</div>

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.
