Struct literals bug ?

monarch_dodra monarchdodra at gmail.com
Sun Sep 29 11:00:57 PDT 2013


On Sunday, 29 September 2013 at 17:35:33 UTC, andrea9940 wrote:
> Thanks for the answer, I  will use the aliases; however I just 
> tried my code on codepad and surprising it worked without 
> errors http://codepad.org/hp0YxIi7

I think there is a bug in there somewhere though:

//----
struct V{
     union {
         struct {
             float x = 0;
             float y = 0;
         }
         struct {
             float r;
             float g;
         }
     }
}

void main() {
     assert(V.init.x == 0 && V.init.y == 0); //Passes
     V v1 = V.init;
     assert(v1 is V.init); //Passes
     V v2 = V(); // OR simply use: V v2;
     assert(v2 is V.init); //Fails
}
//----

That just isn't right. "T.init" and "T()" is supposed to be 
equivalent (bar static opCall).

Also, I'm 99% confident that when initializing a union, the first 
member (in this case, the struct), is the one that gets 
initialized. *fully* initialized.

So my conclusion is that there is something wrong in the 
construction sequence/defintion, and that this bug is definitely 
valid.


More information about the Digitalmars-d-learn mailing list