# Option\<NonNull\<T\>\>::as\_ptr

**URL:** <https://internals.rust-lang.org/t/option-nonnull-t-as-ptr/24563>\
**Category:** libs\
**Created:** [August 29, 2026, 3:52pm UTC](https://internals.rust-lang.org/t/option-nonnull-t-as-ptr/24563 "2026-08-29T15:52:45Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![wyfo](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/wyfo/32/10031_2.png) [@wyfo](https://internals.rust-lang.org/u/wyfo)\
**Post date:** [August 29, 2026, 3:52pm UTC](https://internals.rust-lang.org/t/option-nonnull-t-as-ptr/24563/1 "2026-08-29T15:52:45Z")

</div>

When working with raw pointers, using `NonNull<T>` and sometimes `Option<NonNull<T>>` can be more ergonomic. However, some APIs, e.g. `AtomicPtr`, requires raw pointers. `NonNull` has a `as_ptr` method, but when it comes to `Option<NonNull<T>>`, `map_or(ptr::null_mut(), NonNull::as_ptr)` is cumbersome.

`Option` already have a few specialized methods, like`Option<(T, U)>::unzip`. Adding `Option<NonNull<T>>::as_ptr` feels natural and would improve `NonNull` ergonomics by a lot.

---

<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:** [August 29, 2026, 7:29pm UTC](https://internals.rust-lang.org/t/option-nonnull-t-as-ptr/24563/2 "2026-08-29T19:29:34Z")

</div>

Having `Option<NonZero<_>>::or_zero` seems like it'd make sense too, since it could work generically.

Basically the opposite transmute from `NonZero::new`.

---

<div class="post-metadata">

**Author:** ![wyfo](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/wyfo/32/10031_2.png) [@wyfo](https://internals.rust-lang.org/u/wyfo)\
**Post date:** [August 30, 2026, 9:01pm UTC](https://internals.rust-lang.org/t/option-nonnull-t-as-ptr/24563/3 "2026-08-30T21:01:26Z")

</div>

I opened [Option\<NonNull\<T\>\>::as\_ptr · Issue #872 · rust-lang/libs-team · GitHub](https://github.com/rust-lang/libs-team/issues/872) to continue the discussion.
