Suggestion: class/struct tuples preserve anonymous unions/structs
    Jarrett Billingsley 
    kb3ctd2 at yahoo.com
       
    Wed Feb 14 19:10:02 PST 2007
    
    
  
If you write something like this:
struct S
{
    int x;
    union U
    {
        int a;
        int b;
    }
    U u;
}
And print out its field types:
foreach(T; FieldTypeTuple!(S))
    writefln(typeid(T));
It will print out
int
test.S.U
But if you make the union anonymous:
struct S
{
    int x;
    union
    {
        int a;
        int b;
    }
}
The output becomes:
int
int
int
The anonymous union is getting "flattened out" by the type tuple mechanism.
This messes up some automation features.  For example I'm trying to write a 
simple "Serialize" function which can serialize entire structs.  But unions 
can't be automatically serialized, since the Serialize function has no idea 
which member of the union is currently "valid."  So I have error checking to 
disallow serializing unions, but since the .tupleof facility flattens out 
anonymous unions, it can't check for errors (and therefore I don't know that 
there's a problem until I write the struct out to a file and end up with a 
bunch of invalid members, since they came from the anonymous union).
I'm not sure how anonymous unions and structs are handled by the compiler. 
If they are created as "secret" types, would it then be possible for the 
above struct with the anonymous union to consist of:
int
test.S.__UNION0
or something like that? 
    
    
More information about the Digitalmars-d
mailing list