xxxxxxxxxx
import std.stdio;
import std.traits;
import std.meta;
struct S0
{
double[3] x;
};
struct S1
{
double junk0;
double[3] x;
};
union U
{
S0 s0;
S1 s1;
}
void main()
{
U u;
double* ptr;
u.s0.x = [0.0, 0.1, 0.3];
u.s1.x = [1.0, 1.1, 1.3];
writeln("typeid( u.tupleof): ", typeid(u.tupleof));
writeln("typeid( u.tupleof[0]): ", typeid(u.tupleof[0]));
writeln("typeid( u.tupleof[0].x): ", typeid(u.tupleof[0].x));
writeln();
// indeed both tuples exist
writeln("u.tupleof[0].x.ptr: ", u.tupleof[0].x.ptr);
writeln("u.tupleof[1].x.ptr: ", u.tupleof[1].x.ptr);
// this is fine (notice that 'val' is never used
foreach (i, val; u.tupleof)
{
ptr = u.tupleof[i].x.ptr;
writeln("ptr: ", ptr);
}
// this is fine too
static foreach (i; 0 .. u.tupleof.length)
{
ptr = u.tupleof[i].x.ptr;
writeln("ptr: ", ptr);
}
}