Normalization can skip WF (original) (raw)
I tried this code: [playground]
trait WellUnformed { type RequestNormalize; }
impl<T: ?Sized> WellUnformed for T { type RequestNormalize = (); }
const _: <[[[[[[u8]]]]]] as WellUnformed>::RequestNormalize = (); const _: <Vec as WellUnformed>::RequestNormalize = ();
I expected this to error; [[[[[[u8]]]]]]
is clearly not a well-formed type, as
error[E0277]: the size for values of type
[u8]
cannot be known at compilation time
= help: the traitSized
is not implemented for[u8]
= note: slice and array elements must haveSized
type
Vec<str>
is perhaps even more cursed.
Instead: it compiles.
This is especially relevant for blanket/builtin traits which have associated types, such as marker::DiscriminantKind
and ptr::Pointee
.
- Can cause ICE: Normalization can skip WF #100041 (comment)
- Believed to not be unsound in isolation, as the non-WF type never "fully" exists.
Meta
1.64.0-nightly (2022-07-31 f9cba63)
@rustbot label +A-associated-items