From Jason Turner

[expr.unary.op]

Diff to HTML by rtfpessoa

tmp/tmpy3ozjdvb/{from.md → to.md} RENAMED
@@ -2,15 +2,15 @@
2
 
3
  The unary `*` operator performs *indirection*: the expression to which
4
  it is applied shall be a pointer to an object type, or a pointer to a
5
  function type and the result is an lvalue referring to the object or
6
  function to which the expression points. If the type of the expression
7
- is “pointer to `T`,” the type of the result is “`T`.” a pointer to an
8
- incomplete type (other than *cv* `void`) can be dereferenced. The lvalue
9
- thus obtained can be used in limited ways (to initialize a reference,
10
- for example); this lvalue must not be converted to a prvalue, see 
11
- [[conv.lval]].
12
 
13
  The result of each of the following unary operators is a prvalue.
14
 
15
  The result of the unary `&` operator is a pointer to its operand. The
16
  operand shall be an lvalue or a *qualified-id*. If the operand is a
@@ -42,14 +42,14 @@ from a *qualified-id* for a non-static member function to the type
42
  “pointer to member function” as there is from an lvalue of function type
43
  to the type “pointer to function” ([[conv.func]]). Nor is
44
  `&unqualified-id` a pointer to member, even within the scope of the
45
  *unqualified-id*’s class.
46
 
47
- The address of an object of incomplete type can be taken, but if the
48
- complete type of that object is a class type that declares `operator&()`
49
- as a member function, then the behavior is undefined (and no diagnostic
50
- is required). The operand of `&` shall not be a bit-field.
51
 
52
  The address of an overloaded function (Clause  [[over]]) can be taken
53
  only in a context that uniquely determines which version of the
54
  overloaded function is referred to (see  [[over.over]]). since the
55
  context might determine whether the operand is a static or non-static
 
2
 
3
  The unary `*` operator performs *indirection*: the expression to which
4
  it is applied shall be a pointer to an object type, or a pointer to a
5
  function type and the result is an lvalue referring to the object or
6
  function to which the expression points. If the type of the expression
7
+ is “pointer to `T`,” the type of the result is “`T`.” indirection
8
+ through a pointer to an incomplete type (other than *cv* `void`) is
9
+ valid. The lvalue thus obtained can be used in limited ways (to
10
+ initialize a reference, for example); this lvalue must not be converted
11
+ to a prvalue, see  [[conv.lval]].
12
 
13
  The result of each of the following unary operators is a prvalue.
14
 
15
  The result of the unary `&` operator is a pointer to its operand. The
16
  operand shall be an lvalue or a *qualified-id*. If the operand is a
 
42
  “pointer to member function” as there is from an lvalue of function type
43
  to the type “pointer to function” ([[conv.func]]). Nor is
44
  `&unqualified-id` a pointer to member, even within the scope of the
45
  *unqualified-id*’s class.
46
 
47
+ If `&` is applied to an lvalue of incomplete class type and the complete
48
+ type declares `operator&()`, it is unspecified whether the operator has
49
+ the built-in meaning or the operator function is called. The operand of
50
+ `&` shall not be a bit-field.
51
 
52
  The address of an overloaded function (Clause  [[over]]) can be taken
53
  only in a context that uniquely determines which version of the
54
  overloaded function is referred to (see  [[over.over]]). since the
55
  context might determine whether the operand is a static or non-static