2.8.12 Precedence

Table 2.12, “D Operator Precedence and Associativity” lists the D rules for operator precedence and associativity.
These rules are somewhat complex, but are necessary to provide precise compatibility with
the ANSI C operator precedence rules. The table entries are in order from highest precedence
to lowest precedence.

Table 2.12 D Operator Precedence and Associativity

Operators

Associativity

() [] -> .

left to right

! ~ ++ - + - * & (type) sizeof
stringof offsetof xlate

right to left

* / %

left to right

+ -

left to right

<< >>

left to right

< <= > >=

left to right

== !=

left to right

&

left to right

^

left to right

|

left to right

&&

left to right

^^

left to right

||

left to right

?:

right to left

= += -= *= /= %= &= ^= ?= <<= >>=

right to left

,

left to right

There are several operators in the table that we have not yet
discussed; these will be covered in subsequent chapters:

The comma (,) operator listed in the table is for compatibility with
the ANSI C comma operator, which can be used to evaluate a set of expressions in
left-to-right order and return the value of the right most expression. This operator is
provided strictly for compatibility with C and should generally not be used.

The () entry in the table of operator precedence represents a
function call; examples of calls to functions such as printf and
trace are presented in Chapter 6, Output Formatting. A comma is also used
in D to list arguments to functions and to form lists of associative array keys. This comma
is not the same as the comma operator and does not guarantee left-to-right evaluation. The D
compiler provides no guarantee as to the order of evaluation of arguments to a function or
keys to an associative array. You should be careful of using expressions with interacting
side-effects, such as the pair of expressions i and
i++, in these contexts.