Module rustc_typeck::check::cast[][src]

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

Code for type-checking cast expressions.

A cast e as U is valid if one of the following holds:

where &.T and *T are references of either mutability, and where pointer_kind(T) is the kind of the unsize info in T - the vtable for a trait definition (e.g. fmt::Display or Iterator, not Iterator<Item=u8>) or a length (or () if T: Sized).

Note that lengths are not adjusted when casting raw slices - T: *const [u16] as *const [u8] creates a slice that only includes half of the original memory.

Casting is not transitive, that is, even if e as U1 as U2 is a valid expression, e as U2 is not necessarily so (in fact it will only be valid if U1 coerces to U2).

Structs

CastCheck [
Experimental
]

Reifies a cast check to be checked once we have full type information for a function context.

Enums

CastError [
Experimental
]
PointerKind [
Experimental
]

The kind of pointer and associated metadata (thin, length or vtable) - we only allow casts between fat pointers if their metadata have the same kind.

Functions

make_invalid_casting_error [
Experimental
]