C++ order of evaluation of operands, arguments

Jason Merrill jason@redhat.com
Sun Nov 29 17:00:00 GMT 2015


On 11/25/2015 01:25 PM, Martin Sebor wrote:
> On 11/24/2015 02:55 AM, Andrew Haley wrote:
>> On 23/11/15 23:01, Jason Merrill wrote:
>>> There's a proposal working through the C++ committee to define the order
>>> of evaluation of subexpressions that previously had unspecified
>>> ordering:
>>>
>>> http://www.open-std.org/Jtc1/sc22/wg21/docs/papers/2015/p0145r0.pdf
>>>
>>> I agree with much of this, but was concerned about the proposal to
>>> define order of evaluation of function arguments as left-to-right, since
>>> GCC does right-to-left on PUSH_ARGS_REVERSED targets, including x86_64.
>>>
>>> Any thoughts?
>>
>> Not about PUSH_ARGS_REVERSED targets, but my two-penn'orth:
>>
>> The proposal seems to be a bit of a minefield.  This one:
>>
>> a(b, c, d)
>>
>> is a bit counter-intuitive.  I wouldn't expect a to be evaluated before
>> the arg list.  I wonder how many C++ programmers would.
>
> The motivating example in the paper suggests that many C++
> programmers expect a left to right order of evaluation here
> due to the commonality of constructs like chains of calls.

Yes, although chains of calls like

   var.fn1(args1).fn2(args2)

are covered by the "a.b" bullet.  The above bullet would be more 
relevant to a chain like

   fn1(args1)(args2)

or

   [captures]{...}(args)

Jason



More information about the Gcc mailing list