|
|
@ -659,7 +659,8 @@ Certain Rust types are defined to never be `null`. This includes references (`&T
|
|
|
|
`&mut T`), boxes (`Box<T>`), and function pointers (`extern "abi" fn()`). When
|
|
|
|
`&mut T`), boxes (`Box<T>`), and function pointers (`extern "abi" fn()`). When
|
|
|
|
interfacing with C, pointers that might be `null` are often used, which would seem to
|
|
|
|
interfacing with C, pointers that might be `null` are often used, which would seem to
|
|
|
|
require some messy `transmute`s and/or unsafe code to handle conversions to/from Rust types.
|
|
|
|
require some messy `transmute`s and/or unsafe code to handle conversions to/from Rust types.
|
|
|
|
However, the language provides a workaround.
|
|
|
|
However, trying to construct/work with these invalid values **is undefined behavior**,
|
|
|
|
|
|
|
|
so you should use the following workaround instead.
|
|
|
|
|
|
|
|
|
|
|
|
As a special case, an `enum` is eligible for the "nullable pointer optimization" if it contains
|
|
|
|
As a special case, an `enum` is eligible for the "nullable pointer optimization" if it contains
|
|
|
|
exactly two variants, one of which contains no data and the other contains a field of one of the
|
|
|
|
exactly two variants, one of which contains no data and the other contains a field of one of the
|
|
|
|