|
405 | 405 | an array operand, the set contains the potential results of that operand. |
406 | 406 | \item If $E$ is a class member access |
407 | 407 | expression\iref{expr.ref} of the form |
408 | | -$E_1$ \tcode{.} \opt{\keyword{template}} $E_2$ |
409 | | -naming a non-static data member, |
| 408 | +$E_1$ \tcode{.} \opt{\keyword{template}} $E_2$, |
| 409 | +where $E_2$ designates a a non-static data member or |
| 410 | +a direct base class relationship, |
410 | 411 | the set contains the potential results of $E_1$. |
411 | 412 | \item If $E$ is a class member access expression |
412 | 413 | naming a static data member, |
|
1137 | 1138 | if its name is \tcode{_} (\unicode{005f}{low line}) and it declares |
1138 | 1139 | \begin{itemize} |
1139 | 1140 | \item |
1140 | | -a variable with automatic storage duration, |
| 1141 | +a variable, other than a function parameter, with automatic storage duration, |
1141 | 1142 | \item |
1142 | 1143 | a structured binding |
1143 | 1144 | %FIXME: "and" is strange below; maybe reword to something like: |
|
1440 | 1441 | \grammarterm{compound-statement} of a \grammarterm{lambda-expression}, |
1441 | 1442 | \grammarterm{function-body}, or \grammarterm{function-try-block}, |
1442 | 1443 | \item |
1443 | | -substatement of a selection or iteration statement |
1444 | | -that is not itself a selection or iteration statement, or |
| 1444 | +substatement of a selection, iteration, or expansion statement |
| 1445 | +that is not itself a selection, iteration, or expansion statement, or |
1445 | 1446 | \item |
1446 | 1447 | \grammarterm{handler} of a \grammarterm{function-try-block} |
1447 | 1448 | \end{itemize} |
|
3272 | 3273 | \item |
3273 | 3274 | an entity, value, or object that is TU-local, |
3274 | 3275 | \item |
| 3276 | +an annotation\iref{dcl.attr.annotation}, |
| 3277 | +\item |
3275 | 3278 | a direct base class relationship $(D, B)$\iref{class.derived.general} |
3276 | 3279 | for which either $D$ or $B$ is TU-local, or |
3277 | 3280 | \item |
|
3667 | 3670 | the address of an unspecified byte of storage |
3668 | 3671 | occupied by the complete object of that subobject. |
3669 | 3672 |
|
| 3673 | +\pnum |
| 3674 | +The \defnx{constituent values}{constituent value} of an object $o$ are |
| 3675 | +\begin{itemize} |
| 3676 | +\item |
| 3677 | +if $o$ has scalar type, the value of $o$; |
| 3678 | +\item |
| 3679 | +otherwise, the constituent values of any direct subobjects of $o$ |
| 3680 | +other than inactive union members. |
| 3681 | +\end{itemize} |
| 3682 | +The \defnx{constituent references}{constituent reference} of an object $o$ are |
| 3683 | +\begin{itemize} |
| 3684 | +\item |
| 3685 | +any direct members of $o$ that have reference type, and |
| 3686 | +\item |
| 3687 | +the constituent references of any direct subobjects of $o$ |
| 3688 | +other than inactive union members. |
| 3689 | +\end{itemize} |
| 3690 | + |
3670 | 3691 | \pnum |
3671 | 3692 | Some operations are described as |
3672 | 3693 | \defnx{implicitly creating objects}{object!implicit creation} |
|
4909 | 4930 | \pnum |
4910 | 4931 | The fourth context is when a temporary object |
4911 | 4932 | is created in the \grammarterm{for-range-initializer} of |
4912 | | -either a range-based \keyword{for} statement |
4913 | | -or an enumerating expansion statement\iref{stmt.expand}. |
| 4933 | +a range-based \keyword{for} statement. |
4914 | 4934 | If such a temporary object would otherwise be destroyed |
4915 | 4935 | at the end of the \grammarterm{for-range-initializer} full-expression, |
4916 | 4936 | the object persists for the lifetime of the reference |
4917 | 4937 | initialized by the \grammarterm{for-range-initializer}. |
4918 | 4938 |
|
4919 | 4939 | \pnum |
4920 | | -The fifth context is when a temporary object is created |
| 4940 | +The fifth context is when a temporary object is created in an element $E$ |
| 4941 | +of the \grammarterm{expansion-init-list} |
| 4942 | +of an enumerating expansion statement\iref{stmt.expand}. |
| 4943 | +If such a temporary object would otherwise be destroyed |
| 4944 | +at the end of the full-expression of $E$, |
| 4945 | +the object persists for the lifetime of the \grammarterm{for-range-declaration} |
| 4946 | +initialized from $E$. |
| 4947 | + |
| 4948 | +\pnum |
| 4949 | +The sixth context is when a temporary object is created |
4921 | 4950 | in the \grammarterm{expansion-initializer} |
4922 | | -of an iterating or destructuring expansion statement. |
| 4951 | +of a destructuring expansion statement. |
4923 | 4952 | If such a temporary object would otherwise be destroyed |
4924 | 4953 | at the end of that \grammarterm{expansion-initializer}, |
4925 | 4954 | the object persists for the lifetime of the reference |
4926 | 4955 | initialized by the \grammarterm{expansion-initializer}, if any. |
4927 | 4956 |
|
4928 | 4957 | \pnum |
4929 | | -The sixth context is when a temporary object |
| 4958 | +The seventh context is when a temporary object |
4930 | 4959 | is created in a structured binding declaration\iref{dcl.struct.bind}. |
4931 | 4960 | Any temporary objects introduced by |
4932 | 4961 | the \grammarterm{initializer}{s} for the variables |
|
5304 | 5333 | layout-compatible standard-layout class types\iref{class.mem}. |
5305 | 5334 |
|
5306 | 5335 | \pnum |
5307 | | -A type is \defn{consteval-only} if it is either |
5308 | | -\tcode{std::meta::info} or |
5309 | | -a type compounded from a consteval-only type\iref{basic.compound}. |
| 5336 | +A type is \defn{consteval-only} if it is |
| 5337 | +\begin{itemize} |
| 5338 | +\item \tcode{std::meta::info}, |
| 5339 | +\item \cv{}~\tcode{T}, where \tcode{T} is a consteval-only type, |
| 5340 | +\item a pointer or reference to a consteval-only type, |
| 5341 | +\item an array of consteval-only type, |
| 5342 | +\item a function type having a return type or any parameter type that is consteval-only, |
| 5343 | +\item a class type with any non-static data member having consteval-only type, or |
| 5344 | +\item a type ``pointer to member of class \tcode{C} of type \tcode{T}'', |
| 5345 | +where at least one of \tcode{C} or \tcode{T} is a consteval-only type. |
| 5346 | +\end{itemize} |
5310 | 5347 | Every object of consteval-only type shall be |
5311 | 5348 | \begin{itemize} |
5312 | 5349 | \item |
|
5317 | 5354 | an object whose lifetime begins and ends |
5318 | 5355 | during the evaluation of a core constant expression. |
5319 | 5356 | \end{itemize} |
| 5357 | +Every function of consteval-only type shall be |
| 5358 | +an immediate function\iref{expr.const}. |
5320 | 5359 |
|
5321 | 5360 | \rSec2[basic.fundamental]{Fundamental types} |
5322 | 5361 |
|
|
7024 | 7063 | observable behavior of the abstract machine. |
7025 | 7064 | \end{example} |
7026 | 7065 |
|
7027 | | -\pnum |
7028 | | -\begin{note} |
7029 | | -Because of this and the preceding requirement regarding what threads of execution |
7030 | | -have to perform eventually, it follows that no thread of execution can execute |
7031 | | -forever without an execution step occurring. |
7032 | | -\end{note} |
7033 | | - |
7034 | 7066 | \pnum |
7035 | 7067 | A thread of execution \defnx{makes progress}{make progress!thread} |
7036 | 7068 | when an execution step occurs or a |
|
0 commit comments