reference icon indicating copy to clipboard operation
reference copied to clipboard

Does T and U having the same layout mean that `Foo<T>` and `Foo<U>` have the same layout?

Open Ekleog opened this issue 3 years ago • 0 comments

Hey!

I'm not sure whether here is the right place to open this issue, but I've been in a discussion with @nox about the things that are allowed with repr(transparent) structs.

In particular, suppose this code:

struct Foo<T>(T);
struct Bar;
#[repr(transparent)] struct Baz(Bar);

fn foo(x: Foo<Bar>) -> Foo<Baz> {
    unsafe { std::mem::transmute(x) }
}

Is it correct? In other words, is Foo<T> guaranteed to have the same layout as Foo<U> if T has the same layout as U? (knowing that Foo is repr(Rust))

I'm thinking the answer to this question should be added to the repr(transparent) part of the reference, but I couldn't find the answer in the related RFC; so I couldn't find an answer to this question.

Is the answer to the question known? (In practice it is to the best of my knowledge currently the same layout, but I don't know whether it is a guarantee given for the foreseeable future)

Ekleog avatar May 07 '21 10:05 Ekleog