about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNicholas Bishop <nbishop@nbishop.net>2024-07-05 01:55:01 -0400
committerNicholas Bishop <nbishop@nbishop.net>2024-07-05 01:55:01 -0400
commitccd8dccfc6c19329e9c82e727a877113b8af9860 (patch)
treeaf58110f8162734d63b625d0868cf1c11d78cd8f
parent9f877c9cd2c3f8f2f64df1e0c1804ad0682416d0 (diff)
downloadrust-ccd8dccfc6c19329e9c82e727a877113b8af9860.tar.gz
rust-ccd8dccfc6c19329e9c82e727a877113b8af9860.zip
Describe Sized requirements for mem::offset_of
The container doesn't have to be sized, but the field must be sized (at
least until https://github.com/rust-lang/rust/issues/126151 is stable).
-rw-r--r--library/core/src/mem/mod.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/library/core/src/mem/mod.rs b/library/core/src/mem/mod.rs
index 9054ade2d79..dd4b6e82343 100644
--- a/library/core/src/mem/mod.rs
+++ b/library/core/src/mem/mod.rs
@@ -1266,6 +1266,20 @@ impl<T> SizedTypeProperties for T {}
 /// // ^^^ error[E0616]: field `private` of struct `Struct` is private
 /// ```
 ///
+/// Only [`Sized`] fields are supported, but the container may be unsized:
+/// ```
+/// # use core::mem;
+/// #[repr(C)]
+/// pub struct Struct {
+///     a: u8,
+///     b: [u8],
+/// }
+///
+/// assert_eq!(mem::offset_of!(Struct, a), 0); // OK
+/// // assert_eq!(mem::offset_of!(Struct, b), 1);
+/// // ^^^ error[E0277]: doesn't have a size known at compile-time
+/// ```
+///
 /// Note that type layout is, in general, [subject to change and
 /// platform-specific](https://doc.rust-lang.org/reference/type-layout.html). If
 /// layout stability is required, consider using an [explicit `repr` attribute].