|
129 | 129 | required by the type; the types are not changed\ |
130 | 130 | thereby. |
131 | 131 | \begin{footnote} |
132 | | -The cast and assignment operators must still perform their specific |
| 132 | +The cast and assignment operators still perform their specific |
133 | 133 | conversions as described in~\ref{expr.type.conv}, \ref{expr.cast}, |
134 | 134 | \ref{expr.static.cast} and~\ref{expr.ass}. |
135 | 135 | \end{footnote} |
|
479 | 479 | if the (possibly converted) expression is a prvalue of object type. |
480 | 480 | \begin{note} |
481 | 481 | If the original expression is an lvalue of class type, |
482 | | -it must have a volatile copy constructor to initialize the temporary object |
| 482 | +the program is ill-formed unless |
| 483 | +the class has a volatile copy constructor to initialize the temporary object |
483 | 484 | that is the result object of the temporary materialization conversion. |
484 | 485 | \end{note} |
485 | 486 | The expression is evaluated and its result (if any) is discarded. |
|
716 | 717 | \tcode{T} shall be a complete type. |
717 | 718 | \begin{note} |
718 | 719 | If \tcode{T} is a class type (or array thereof), |
719 | | -it must have an accessible and non-deleted destructor; |
| 720 | +the program is ill-formed |
| 721 | +unless the class has an accessible and non-deleted destructor; |
720 | 722 | see~\ref{class.dtor}. |
721 | 723 | \end{note} |
722 | 724 | \begin{example} |
|
2389 | 2391 | \end{itemize} |
2390 | 2392 | \begin{note} |
2391 | 2393 | This enables an \grammarterm{init-capture} like |
2392 | | -``\tcode{x = std::move(x)}''; the second ``\tcode{x}'' must bind to a |
| 2394 | +``\tcode{x = std::move(x)}''; the second ``\tcode{x}'' binds to a |
2393 | 2395 | declaration in the surrounding context. |
2394 | 2396 | \end{note} |
2395 | 2397 | \begin{example} |
|
2628 | 2630 | If declared, such non-static data members shall be of literal type. |
2629 | 2631 | \begin{example} |
2630 | 2632 | \begin{codeblock} |
2631 | | -// The inner closure type must be a literal type regardless of how reference captures are represented. |
| 2633 | +// The inner closure type is a literal type regardless of how reference captures are represented. |
2632 | 2634 | static_assert([](int n) { return [&n] { return ++n; }(); }(3) == 4); |
2633 | 2635 | \end{codeblock} |
2634 | 2636 | \end{example} |
|
4205 | 4207 | containing the original member, the resulting pointer to member points |
4206 | 4208 | to the original member. Otherwise, the behavior is undefined. |
4207 | 4209 | \begin{note} |
4208 | | -Although class \tcode{B} need not contain the original member, the |
4209 | | -dynamic type of the object with which indirection through the pointer |
4210 | | -to member is performed must contain the original member; |
| 4210 | +Although class \tcode{B} need not contain the original member, |
| 4211 | +the behavior is undefined |
| 4212 | +if the dynamic type of the object with which indirection through the pointer |
| 4213 | +to member is performed does not contain the original member; |
4211 | 4214 | see~\ref{expr.mptr.oper}. |
4212 | 4215 | \end{note} |
4213 | 4216 |
|
|
4591 | 4594 | \indextext{type!incomplete}% |
4592 | 4595 | Indirection through a pointer to an incomplete type (other than |
4593 | 4596 | \cv{} \keyword{void}) is valid. The lvalue thus obtained can be |
4594 | | -used in limited ways (to initialize a reference, for example); this |
4595 | | -lvalue must not be converted to a prvalue, see~\ref{conv.lval}. |
| 4597 | +used in limited ways (to initialize a reference, for example); |
| 4598 | +the program is ill-formed |
| 4599 | +if such an lvalue is converted to a prvalue, see~\ref{conv.lval}. |
4596 | 4600 | \end{note} |
4597 | 4601 |
|
4598 | 4602 | \pnum |
|
5593 | 5597 |
|
5594 | 5598 | \pnum |
5595 | 5599 | \begin{note} |
5596 | | -When the allocation function returns a value other than null, it must be |
| 5600 | +When the allocation function returns a value other than null, it returns |
5597 | 5601 | a pointer to a block of storage in which space for the object has been |
5598 | 5602 | reserved. The block of storage is assumed to be |
5599 | 5603 | appropriately aligned\iref{basic.align} |
|
5778 | 5782 | \end{footnote} |
5779 | 5783 | If not, the behavior is undefined. |
5780 | 5784 | \begin{note} |
5781 | | -This means that the syntax of the \grammarterm{delete-expression} must |
5782 | | -match the type of the object allocated by \keyword{new}, not the syntax of the |
5783 | | -\grammarterm{new-expression}. |
| 5785 | +This means that the behavior is undefined |
| 5786 | +if the syntax of the \grammarterm{delete-expression} does not |
| 5787 | +match the type of the object allocated by \keyword{new}, |
| 5788 | +regardless of the syntax of the \grammarterm{new-expression}. |
5784 | 5789 | \end{note} |
5785 | 5790 | \begin{note} |
5786 | 5791 | A pointer to a \keyword{const} type can be the operand of a |
|
0 commit comments