On Wednesday, 22 April 2015 at 11:29:30 UTC, Daniel Kozak wrote:
On Wednesday, 22 April 2015 at 11:28:44 UTC, Daniel Kozak wrote:
static struct S
{
     immutable FLAG_ON = 1;
     immutable FLAG_GPRS = 2;
     immutable FLAG_HIDDEN = 4;
     ubyte flags;
     ubyte value;

     bool isFlagSet(int flag)
     {
         return flags && flag == flag;
     }
}

void main(string[ ] args)
{
     auto someData = [0x01, 0x10, 0x02, 0x16, 0x04, 0x08];
     auto countS = someData.length / S.sizeof;

     S[] sArray = (cast(S*)someData.ptr)[0 .. countS];
     assert(sArray.length == 3);
}

I agree that the change should be more prominent in the changelog.

Having said that, if your code makes an assumption about the layout (alignment and size) of a struct, it should `static assert` that assumption, or at least have a test case that relies it. You're just asking for trouble without that.

Reply via email to