@@ -51,31 +51,33 @@ $(H3 $(LNAME2 .define-lvalue, Lvalue))
5151$(P The following expressions, and no others, are called *lvalue expressions* or *lvalues*:)
5252$(OL
5353$(LI $(RELATIVE_LINK2 this, `this`) inside `struct` and `union` member functions;)
54- $(LI a variable, function name, or invocation of a function that returns by reference;)
55- $(LI the result of the `.` $(GLINK PostfixExpression) or
54+ $(LI a variable, function name, or invocation of a function that
55+ $(DDSUBLINK spec/function, ref-functions, returns by reference);)
56+ $(LI the result of the `.` $(GLINK PostfixExpression) and
5657$(DDSUBLINK spec/module, module_scope_operators, Module Scope Operator)
5758when the rightmost side of the dot is a variable,
5859field (direct or `static`), function name, or invocation of a function that returns by reference;)
5960$(LI the result of the following expressions:
6061$(UL
61- $(LI built-in unary operators `+` (when applied to an lvalue), `*`, `++` (prefix only), `--` (prefix only);)
62- $(LI built-in indexing operator `[]` (but not the slicing operator);)
63- $(LI built-in assignment binary operators, i.e. `=`, `+=`, `*=`, `/=`, `%=`, `&=`, `|=`, `^=`, `~=`,
62+ $(LI built-in $(RELATIVE_LINK2 unary-expression, unary operators) `+` (when applied to an lvalue), `*`, `++` (prefix only), `--` (prefix only);)
63+ $(LI built-in $(RELATIVE_LINK2 index_expressions, indexing operator) `[]` (but not the slicing operator);)
64+ $(LI built-in $(RELATIVE_LINK2 assign_expressions, assignment operators) , i.e. `=`, `+=`, `*=`, `/=`, `%=`, `&=`, `|=`, `^=`, `~=`,
6465`<<=`, `>>=`, `>>>=`, and `^^=`;)
66+ $(LI $(DDLINK spec/operatoroverloading, Operator Overloading, user-defined operators)
67+ if and only if the function called as a result of lowering returns
68+ by reference;)
6569$(LI the $(GLINK ConditionalExpression) operator $(I e) `?` $(I e$(SUBSCRIPT 1)) `:` $(I e$(SUBSCRIPT 2)) under the following
6670circumstances:)
6771$(OL
6872 $(LI $(I e$(SUBSCRIPT 1)) and $(I e$(SUBSCRIPT 2)) are lvalues of the same type; OR)
6973 $(LI One of $(I e$(SUBSCRIPT 1)) and $(I e$(SUBSCRIPT 2)) is an lvalue of type `T` and the other has
70- and `alias this` converting it to `ref T`;))
71- $(LI $(DDLINK spec/operatoroverloading, Operator Overloading, user-defined operators)
72- if and only if the function called as a result of lowering returns
73- by reference;)
74+ an `alias this` which converts it to an lvalue of `T`;))
7475$(LI $(RELATIVE_LINK2 mixin_expressions, `mixin` expressions) if and only if the
7576compilation of the expression resulting from compiling
7677the argument(s) to `mixin` is an lvalue;)
77- $(LI `cast(U)` expressions applied to lvalues of type `T` when `T*` is implicitly convertible to `U*`;)
78- $(LI `cast()` and `cast(`$(I qualifier list)`)` when applied to an lvalue.)
78+ $(LI $(RELATIVE_LINK2 cast_expressions, `cast(U)` expressions) applied to lvalues
79+ of type `T` when `T*` is implicitly convertible to `U*`;)
80+ $(LI $(RELATIVE_LINK2 cast_qualifier, `cast(`$(I TypeCtors)$(OPT)`)`) when applied to an lvalue.)
7981)))
8082
8183$(H3 $(LNAME2 .define-rvalue, Rvalue))
0 commit comments