The problem (AFAICT), is that `align` only specifies alignement *relative* to the encompassing struct.

On linux, structs seem to always be 8-aligned, so it should be a non-issue, but on win32, they are 4 byte aligned, so relocation is mandatory.

Also, `align(T.alignof)` is illegal: `align` only accepts literal integers (though I'm sure we can open an ER for this).

Furthermore said, toying around, I have been able to see strange things:

```D
struct S
{
    align(64) ubyte u;
}
static assert(S.alignof == 64); //Is this correct?

class C1
{
    align(64) ubyte u;
}
static assert(classInstanceAlignment!C1 == 8); //Wait... what? It's 8?

class C2
{
    S s;
}
static assert(classInstanceAlignment!C2 == 64); //And now it's 64???

void main()
{
    S s;
    assert(cast(size_t)&s % S.alignof == 0); //This fails. That's bad, a stack based variable that doesn't respect its alignment? It should work out of the box, no?
}
```

So... I think there is some confusion in regards to how alignement/padding works, including at the compiler's level. So, for now, I don't think there's any way around it.