tmp/tmpsqegrbmm/{from.md → to.md}
RENAMED
|
@@ -5,29 +5,34 @@ followed by the keyword `template` ([[temp.names]]), and then followed
|
|
| 5 |
by an *id-expression*, is a postfix expression. The postfix expression
|
| 6 |
before the dot or arrow is evaluated;[^6] the result of that evaluation,
|
| 7 |
together with the *id-expression*, determines the result of the entire
|
| 8 |
postfix expression.
|
| 9 |
|
| 10 |
-
For the first option (dot) the first expression shall
|
| 11 |
-
class type. For the second option (arrow) the first
|
| 12 |
-
|
| 13 |
-
converted to the equivalent form `(*(E1)).E2`;
|
| 14 |
-
[[expr.ref]] will address only the first option
|
| 15 |
-
case, the *id-expression* shall name a member of
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
|
| 21 |
Abbreviating *postfix-expression.id-expression* as `E1.E2`, `E1` is
|
| 22 |
-
called the *object expression*.
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
|
|
|
| 27 |
|
| 28 |
-
If `E2` is declared to have type “reference to `T`
|
| 29 |
lvalue; the type of `E1.E2` is `T`. Otherwise, one of the following
|
| 30 |
rules applies.
|
| 31 |
|
| 32 |
- If `E2` is a static data member and the type of `E2` is `T`, then
|
| 33 |
`E1.E2` is an lvalue; the expression designates the named member of
|
|
@@ -52,22 +57,25 @@ rules applies.
|
|
| 52 |
lvalue; the expression designates the static member function. The
|
| 53 |
type of `E1.E2` is the same type as that of `E2`, namely “function
|
| 54 |
of parameter-type-list returning `T`”.
|
| 55 |
- Otherwise, if `E1.E2` refers to a non-static member function and the
|
| 56 |
type of `E2` is “function of parameter-type-list *cv*
|
| 57 |
-
*ref-qualifierₒₚₜ
|
| 58 |
expression designates a non-static member function. The expression
|
| 59 |
can be used only as the left-hand operand of a member function
|
| 60 |
-
call ([[class.mfct]]). Any redundant set of parentheses
|
| 61 |
-
the expression is ignored (
|
| 62 |
-
|
|
|
|
| 63 |
- If `E2` is a nested type, the expression `E1.E2` is ill-formed.
|
| 64 |
- If `E2` is a member enumerator and the type of `E2` is `T`, the
|
| 65 |
expression `E1.E2` is a prvalue. The type of `E1.E2` is `T`.
|
| 66 |
|
| 67 |
If `E2` is a non-static data member or a non-static member function, the
|
| 68 |
program is ill-formed if the class of which `E2` is directly a member is
|
| 69 |
an ambiguous base ([[class.member.lookup]]) of the naming class (
|
| 70 |
-
[[class.access.base]]) of `E2`.
|
| 71 |
-
|
| 72 |
-
|
|
|
|
|
|
|
| 73 |
|
|
|
|
| 5 |
by an *id-expression*, is a postfix expression. The postfix expression
|
| 6 |
before the dot or arrow is evaluated;[^6] the result of that evaluation,
|
| 7 |
together with the *id-expression*, determines the result of the entire
|
| 8 |
postfix expression.
|
| 9 |
|
| 10 |
+
For the first option (dot) the first expression shall be a glvalue
|
| 11 |
+
having complete class type. For the second option (arrow) the first
|
| 12 |
+
expression shall be a prvalue having pointer to complete class type. The
|
| 13 |
+
expression `E1->E2` is converted to the equivalent form `(*(E1)).E2`;
|
| 14 |
+
the remainder of [[expr.ref]] will address only the first option
|
| 15 |
+
(dot).[^7] In either case, the *id-expression* shall name a member of
|
| 16 |
+
the class or of one of its base classes.
|
| 17 |
+
|
| 18 |
+
[*Note 1*: Because the name of a class is inserted in its class scope
|
| 19 |
+
(Clause [[class]]), the name of a class is also considered a nested
|
| 20 |
+
member of that class. — *end note*]
|
| 21 |
+
|
| 22 |
+
[*Note 2*: [[basic.lookup.classref]] describes how names are looked up
|
| 23 |
+
after the `.` and `->` operators. — *end note*]
|
| 24 |
|
| 25 |
Abbreviating *postfix-expression.id-expression* as `E1.E2`, `E1` is
|
| 26 |
+
called the *object expression*. If `E2` is a bit-field, `E1.E2` is a
|
| 27 |
+
bit-field. The type and value category of `E1.E2` are determined as
|
| 28 |
+
follows. In the remainder of [[expr.ref]], *cq* represents either
|
| 29 |
+
`const` or the absence of `const` and *vq* represents either `volatile`
|
| 30 |
+
or the absence of `volatile`. *cv* represents an arbitrary set of
|
| 31 |
+
cv-qualifiers, as defined in [[basic.type.qualifier]].
|
| 32 |
|
| 33 |
+
If `E2` is declared to have type “reference to `T`”, then `E1.E2` is an
|
| 34 |
lvalue; the type of `E1.E2` is `T`. Otherwise, one of the following
|
| 35 |
rules applies.
|
| 36 |
|
| 37 |
- If `E2` is a static data member and the type of `E2` is `T`, then
|
| 38 |
`E1.E2` is an lvalue; the expression designates the named member of
|
|
|
|
| 57 |
lvalue; the expression designates the static member function. The
|
| 58 |
type of `E1.E2` is the same type as that of `E2`, namely “function
|
| 59 |
of parameter-type-list returning `T`”.
|
| 60 |
- Otherwise, if `E1.E2` refers to a non-static member function and the
|
| 61 |
type of `E2` is “function of parameter-type-list *cv*
|
| 62 |
+
*ref-qualifier*ₒₚₜ returning `T`”, then `E1.E2` is a prvalue. The
|
| 63 |
expression designates a non-static member function. The expression
|
| 64 |
can be used only as the left-hand operand of a member function
|
| 65 |
+
call ([[class.mfct]]). \[*Note 3*: Any redundant set of parentheses
|
| 66 |
+
surrounding the expression is ignored (
|
| 67 |
+
[[expr.prim]]). — *end note*] The type of `E1.E2` is “function of
|
| 68 |
+
parameter-type-list *cv* returning `T`”.
|
| 69 |
- If `E2` is a nested type, the expression `E1.E2` is ill-formed.
|
| 70 |
- If `E2` is a member enumerator and the type of `E2` is `T`, the
|
| 71 |
expression `E1.E2` is a prvalue. The type of `E1.E2` is `T`.
|
| 72 |
|
| 73 |
If `E2` is a non-static data member or a non-static member function, the
|
| 74 |
program is ill-formed if the class of which `E2` is directly a member is
|
| 75 |
an ambiguous base ([[class.member.lookup]]) of the naming class (
|
| 76 |
+
[[class.access.base]]) of `E2`.
|
| 77 |
+
|
| 78 |
+
[*Note 4*: The program is also ill-formed if the naming class is an
|
| 79 |
+
ambiguous base of the class type of the object expression; see
|
| 80 |
+
[[class.access.base]]. — *end note*]
|
| 81 |
|