What's the order of argument evaluation for functions

Don nospam at nospam.com
Wed Apr 27 14:43:53 PDT 2011


Jens Mueller wrote:
> Steven Schveighoffer wrote:
>> On Wed, 27 Apr 2011 16:22:45 -0400, Jens Mueller
>> <jens.k.mueller at gmx.de> wrote:
>>
>>> Hi,
>>>
>>> on page 50 TDPL states
>>> "All arguments are evaluated left to right before fun gets invoked."
>>> That means
>>> int i;
>>> writeln(++i, ++i);
>>> is supposed to print
>>> "12".
>>> and is valid.
>>> But on http://www.digitalmars.com/d/2.0/expression.html
>>> func(++i, ++i);
>>> is defined as an error.
>>> Is the evaluation order for function calls undefined or it is left to
>>> right?
>> Both :)
>>
>> The answer is, the current spec says it is an error.  However, TDPL
>> is usually considered to be what the spec *will* be when D2 is
>> completed.  So expect the left to right evaluation in the future.
>> It's likely that the compiler doesn't currently conform to TDPL.
> 
> I see. I never seen it like this. So all documentation on
> http://www.digitalmars.com/d/2.0/ specifies how it is right now but not
> what it will be. And by 'usually' you mean that TDPL can be in error.
> So I should rely on TDPL exclusively. Even though I find the online
> documentation easier to search.

It's slightly more complicated. The online docs are what it will be. 
But, some decisions were made shortly before the publication of TDPL 
which are not yet reflected in the online docs. But a few decisions made 
after the publication of TDPL _are_ included in the online docs. 
Generally they are things which TDPL doesn't mention. (TDPL was 
intentionally silent or vague on a few things, because they hadn't been 
decided).


More information about the Digitalmars-d mailing list