about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--library/core/src/result.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/library/core/src/result.rs b/library/core/src/result.rs
index b2b627fe6a9..16c97284104 100644
--- a/library/core/src/result.rs
+++ b/library/core/src/result.rs
@@ -224,6 +224,21 @@
 //! [`Err(E)`]: Err
 //! [io::Error]: ../../std/io/struct.Error.html "io::Error"
 //!
+//! # Representation
+//!
+//! In some cases, [`Result<T, E>`] will gain the same size, alignment, and ABI
+//! guarantees as [`Option<T>`] has. One of either the `T` or `E` type must be a
+//! type that qualifies for `Option` guarantees, and the *other* type must meet
+//! all of the following conditions:
+//! * Is a zero-sized type with alignment 1 (a "1-ZST").
+//! * Has no fields.
+//! * Does not have the #[non_exhaustive] attribute.
+//!
+//! For example, `Result<NonZeroI32, ()>` or `Result<(), NonZeroI32>` would both
+//! have the same guarantees as `Option<NonZeroI32>`. The only difference is the
+//! implied semantics: `Result<NonZeroI32, ()>` is "a non-zero success value"
+//! while `Result<(), NonZeroI32>` is "a non-zero error value".
+//!
 //! # Method overview
 //!
 //! In addition to working with pattern matching, [`Result`] provides a