On 02/17/2018 09:03 AM, Steven Schveighoffer wrote:
On 2/17/18 8:19 AM, Steven Schveighoffer wrote:
On 2/16/18 7:04 PM, Andrei Alexandrescu wrote:
I've been long bothered that the builtin .tupleof and our own
abstractions Fields and RepresentationTypeTuple in std.traits - all
omit the essential information of field offsets. That makes types
that use align() to have the same .tupleof, Fields, and
RepresentationTypeTuple even though they shouldn't.
The right answer is Layout a tuple of (offset, type) pairs describing
entirely the memory layout of a type. We need such for memory
allocation, garbage collection, serialization, and more.
The implementation turned out to be quite compact - 81 lines
including a compile-time mergesort. Destroy!
https://github.com/dlang/phobos/pull/6192
Can't you just use offsetof?
struct S
{
ubyte x;
int y;
}
static foreach(i; 0 .. s.tupleof.length)
{
writeln(s.tupleof[i].offsetof);
}
outputs:
0
4
I found this also works:
static foreach(alias x; S.tupleof)
{
writeln(x.offsetof);
}
Yes, the implementation uses offsetof. -- Andrei