www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Re: void initialization vs alignment holes

strtr:
 static if( S.sizeof == members.sizeof )
  S s = void;
 else
  S s;

You can use something like this :-) import std.stdio: writeln; int unusedBytesStruct(S)() if (is(S == struct)) { int totUsed; foreach (field; S.init.tupleof) totUsed += field.sizeof; return cast(int)S.sizeof - totUsed; } struct S1 { byte s; double d; } align(1) struct S2 { byte s; double d; } struct T { double d; int x; short s; ubyte u1, u2; } void main() { writeln(unusedBytesStruct!S1); // 7 writeln(unusedBytesStruct!S2); // 0 writeln(unusedBytesStruct!T); // 0 } Bye, bearophile
Mar 07 2010