Struct assignment, possible DMD bug?
Maxim Fomin
maxim at maxim-fomin.ru
Sat Sep 29 23:31:47 PDT 2012
On Saturday, 29 September 2012 at 23:02:08 UTC, Timon Gehr wrote:
> On 09/30/2012 12:51 AM, Ali Çehreli wrote:
>> Disclaimer: I assume that D's rules are the same as C and C++
>> here.
>>
>
> C and C++ do not have struct literals and if I am not mistaken,
> constructor invocation is a sequence point.
S(4, s.a, 6) is a struct literal here, not a constructor call
(because structure S doesn't define any constructors). C has
compound literals which is close to D struct literals.
> Besides, this does not make any sense, what is the relevant
> part of the standard?
The standard states for assign expression (in $6.15.6) that "the
side effect of updating the stored value is sequenced after the
value computations of the left and the rights operands. The
evaluations of the operands are unsequenced". This means that a
compiler can evaluate either first and the second operand, or the
second and the first. In any case it can store value only after
evaluations of both operands which means that value 4 cannot be
assigned to s.a when S(4, s.a, 6) is evaluated. Actually, it is a
bug.
More information about the Digitalmars-d-learn
mailing list