| #![feature(extern_types)] |
| |
| use std::mem::offset_of; |
| |
| struct Alpha { |
| x: u8, |
| y: u16, |
| z: [u8], |
| } |
| |
| trait Trait {} |
| |
| struct Beta { |
| x: u8, |
| y: u16, |
| z: dyn Trait, |
| } |
| |
| extern { |
| type Extern; |
| } |
| |
| struct Gamma { |
| x: u8, |
| y: u16, |
| z: Extern, |
| } |
| |
| struct Delta<T: ?Sized> { |
| x: u8, |
| y: u16, |
| z: T, |
| } |
| |
| fn main() { |
| offset_of!(Alpha, z); //~ ERROR the size for values of type |
| offset_of!(Beta, z); //~ ERROR the size for values of type |
| offset_of!(Gamma, z); //~ ERROR the size for values of type |
| offset_of!((u8, dyn Trait), 0); // ok |
| offset_of!((u8, dyn Trait), 1); //~ ERROR the size for values of type |
| } |
| |
| fn delta() { |
| offset_of!(Delta<Alpha>, z); //~ ERROR the size for values of type |
| offset_of!(Delta<Extern>, z); //~ ERROR the size for values of type |
| offset_of!(Delta<dyn Trait>, z); //~ ERROR the size for values of type |
| } |
| |
| fn generic_with_maybe_sized<T: ?Sized>() -> usize { |
| offset_of!(Delta<T>, z) //~ ERROR the size for values of type |
| } |
| |
| fn illformed_tuple() { |
| offset_of!(([u8], u8), 1); //~ ERROR the size for values of type |
| } |