tmp/tmpqkci1y2j/{from.md → to.md}
RENAMED
|
@@ -20,13 +20,14 @@ If `T` is “pointer to *cv1* `B`” and `v` has type “pointer to *cv2* `D`”
|
|
| 20 |
such that `B` is a base class of `D`, the result is a pointer to the
|
| 21 |
unique `B` subobject of the `D` object pointed to by `v`, or a null
|
| 22 |
pointer value if `v` is a null pointer value. Similarly, if `T` is
|
| 23 |
“reference to *cv1* `B`” and `v` has type *cv2* `D` such that `B` is a
|
| 24 |
base class of `D`, the result is the unique `B` subobject of the `D`
|
| 25 |
-
object referred to by `v`.[^14]
|
| 26 |
-
|
| 27 |
-
|
|
|
|
| 28 |
|
| 29 |
[*Example 1*:
|
| 30 |
|
| 31 |
``` cpp
|
| 32 |
struct B { };
|
|
@@ -46,11 +47,11 @@ If `v` is a null pointer value, the result is a null pointer value.
|
|
| 46 |
If `T` is “pointer to cv `void`”, then the result is a pointer to the
|
| 47 |
most derived object pointed to by `v`. Otherwise, a runtime check is
|
| 48 |
applied to see if the object pointed or referred to by `v` can be
|
| 49 |
converted to the type pointed or referred to by `T`.
|
| 50 |
|
| 51 |
-
|
| 52 |
check logically executes as follows:
|
| 53 |
|
| 54 |
- If, in the most derived object pointed (referred) to by `v`, `v`
|
| 55 |
points (refers) to a public base class subobject of a `C` object, and
|
| 56 |
if only one object of type `C` is derived from the subobject pointed
|
|
|
|
| 20 |
such that `B` is a base class of `D`, the result is a pointer to the
|
| 21 |
unique `B` subobject of the `D` object pointed to by `v`, or a null
|
| 22 |
pointer value if `v` is a null pointer value. Similarly, if `T` is
|
| 23 |
“reference to *cv1* `B`” and `v` has type *cv2* `D` such that `B` is a
|
| 24 |
base class of `D`, the result is the unique `B` subobject of the `D`
|
| 25 |
+
object referred to by `v`.[^14]
|
| 26 |
+
|
| 27 |
+
In both the pointer and reference cases, the program is ill-formed if
|
| 28 |
+
`B` is an inaccessible or ambiguous base class of `D`.
|
| 29 |
|
| 30 |
[*Example 1*:
|
| 31 |
|
| 32 |
``` cpp
|
| 33 |
struct B { };
|
|
|
|
| 47 |
If `T` is “pointer to cv `void`”, then the result is a pointer to the
|
| 48 |
most derived object pointed to by `v`. Otherwise, a runtime check is
|
| 49 |
applied to see if the object pointed or referred to by `v` can be
|
| 50 |
converted to the type pointed or referred to by `T`.
|
| 51 |
|
| 52 |
+
Let `C` be the class type to which `T` points or refers. The runtime
|
| 53 |
check logically executes as follows:
|
| 54 |
|
| 55 |
- If, in the most derived object pointed (referred) to by `v`, `v`
|
| 56 |
points (refers) to a public base class subobject of a `C` object, and
|
| 57 |
if only one object of type `C` is derived from the subobject pointed
|