From Jason Turner

[conv.ptr]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpy1k96e74/{from.md → to.md} +13 -11
tmp/tmpy1k96e74/{from.md → to.md} RENAMED
@@ -3,28 +3,30 @@
3
  A *null pointer constant* is an integer literal [[lex.icon]] with value
4
  zero or a prvalue of type `std::nullptr_t`. A null pointer constant can
5
  be converted to a pointer type; the result is the null pointer value of
6
  that type [[basic.compound]] and is distinguishable from every other
7
  value of object pointer or function pointer type. Such a conversion is
8
- called a *null pointer conversion*. Two null pointer values of the same
9
- type shall compare equal. The conversion of a null pointer constant to a
10
- pointer to cv-qualified type is a single conversion, and not the
11
- sequence of a pointer conversion followed by a qualification conversion
12
- [[conv.qual]]. A null pointer constant of integral type can be converted
13
- to a prvalue of type `std::nullptr_t`.
14
 
15
  [*Note 1*: The resulting prvalue is not a null pointer
16
  value. — *end note*]
17
 
18
  A prvalue of type “pointer to cv `T`”, where `T` is an object type, can
19
  be converted to a prvalue of type “pointer to cv `void`”. The pointer
20
  value [[basic.compound]] is unchanged by this conversion.
21
 
22
- A prvalue of type “pointer to cv `D`”, where `D` is a complete class
23
  type, can be converted to a prvalue of type “pointer to cv `B`”, where
24
  `B` is a base class [[class.derived]] of `D`. If `B` is an inaccessible
25
  [[class.access]] or ambiguous [[class.member.lookup]] base class of `D`,
26
- a program that necessitates this conversion is ill-formed. The result of
27
- the conversion is a pointer to the base class subobject of the derived
28
- class object. The null pointer value is converted to the null pointer
29
- value of the destination type.
 
 
 
30
 
 
3
  A *null pointer constant* is an integer literal [[lex.icon]] with value
4
  zero or a prvalue of type `std::nullptr_t`. A null pointer constant can
5
  be converted to a pointer type; the result is the null pointer value of
6
  that type [[basic.compound]] and is distinguishable from every other
7
  value of object pointer or function pointer type. Such a conversion is
8
+ called a *null pointer conversion*. The conversion of a null pointer
9
+ constant to a pointer to cv-qualified type is a single conversion, and
10
+ not the sequence of a pointer conversion followed by a qualification
11
+ conversion [[conv.qual]]. A null pointer constant of integral type can
12
+ be converted to a prvalue of type `std::nullptr_t`.
 
13
 
14
  [*Note 1*: The resulting prvalue is not a null pointer
15
  value. — *end note*]
16
 
17
  A prvalue of type “pointer to cv `T`”, where `T` is an object type, can
18
  be converted to a prvalue of type “pointer to cv `void`”. The pointer
19
  value [[basic.compound]] is unchanged by this conversion.
20
 
21
+ A prvalue `v` of type “pointer to cv `D`”, where `D` is a complete class
22
  type, can be converted to a prvalue of type “pointer to cv `B`”, where
23
  `B` is a base class [[class.derived]] of `D`. If `B` is an inaccessible
24
  [[class.access]] or ambiguous [[class.member.lookup]] base class of `D`,
25
+ a program that necessitates this conversion is ill-formed. If `v` is a
26
+ null pointer value, the result is a null pointer value. Otherwise, if
27
+ `B` is a virtual base class of `D` and `v` does not point to an object
28
+ whose type is similar [[conv.qual]] to `D` and that is within its
29
+ lifetime or within its period of construction or destruction
30
+ [[class.cdtor]], the behavior is undefined. Otherwise, the result is a
31
+ pointer to the base class subobject of the derived class object.
32