|
432 | 432 |
|
433 | 433 | \pnum |
434 | 434 | The library provides the function template \tcode{declval} to simplify the definition of |
435 | | -expressions which occur as unevaluated operands\iref{expr.prop}. |
| 435 | +expressions which occur as unevaluated operands\iref{term.unevaluated.operand}. |
436 | 436 |
|
437 | 437 | \indexlibraryglobal{declval}% |
438 | 438 | \begin{itemdecl} |
|
2443 | 2443 | \pnum |
2444 | 2444 | Let \tcode{TS} denote \tcode{tuple_size<T>} of the cv-unqualified type \tcode{T}. |
2445 | 2445 | If the expression \tcode{TS::value} is well-formed |
2446 | | -when treated as an unevaluated operand, then |
| 2446 | +when treated as an unevaluated operand\iref{term.unevaluated.operand}, then |
2447 | 2447 | each specialization of the template meets the \oldconcept{Unary\-Type\-Trait} requirements\iref{meta.rqmts} |
2448 | 2448 | with a base characteristic of |
2449 | 2449 | \begin{codeblock} |
|
16120 | 16120 | and return type \tcode{R} |
16121 | 16121 | if the expression |
16122 | 16122 | \tcode{\placeholdernc{INVOKE}<R>(declval<F\&>(), declval<ArgTypes>()...)}, |
16123 | | -considered as an unevaluated operand\iref{expr.prop}, is |
| 16123 | +considered as an unevaluated operand\iref{term.unevaluated.operand}, is |
16124 | 16124 | well-formed\iref{func.require}. |
16125 | 16125 |
|
16126 | 16126 | \pnum |
|
18104 | 18104 | \tcode{struct is_assignable;} & |
18105 | 18105 | The expression \tcode{declval<T>() =} \tcode{declval<U>()} is well-formed |
18106 | 18106 | when treated as an unevaluated |
18107 | | - operand\iref{expr.prop}. Access checking is performed as if in a context |
| 18107 | + operand\iref{term.unevaluated.operand}. Access checking is performed as if in a context |
18108 | 18108 | unrelated to \tcode{T} and \tcode{U}. Only the validity of the immediate context |
18109 | 18109 | of the assignment expression is considered. |
18110 | 18110 | \begin{tailnote} |
|
18139 | 18139 | \tcode{struct is_swappable_with;} & |
18140 | 18140 | The expressions \tcode{swap(declval<T>(), declval<U>())} and |
18141 | 18141 | \tcode{swap(declval<U>(), declval<T>())} are each well-formed |
18142 | | - when treated as an unevaluated operand\iref{expr.prop} |
| 18142 | + when treated as an unevaluated operand\iref{term.unevaluated.operand} |
18143 | 18143 | in an overload-resolution context |
18144 | 18144 | for swappable values\iref{swappable.requirements}. |
18145 | 18145 | Access checking is performed as if in a context |
|
18177 | 18177 | for which the expression |
18178 | 18178 | \tcode{declval<U\&>().\~U()} |
18179 | 18179 | is well-formed |
18180 | | - when treated as an unevaluated operand\iref{expr.prop}, |
| 18180 | + when treated as an unevaluated operand\iref{term.unevaluated.operand}, |
18181 | 18181 | where \tcode{U} is |
18182 | 18182 | \tcode{remove_all_extents_t<T>}. & |
18183 | 18183 | \tcode{T} shall be a complete type, \cv{}~\keyword{void}, |
|
18603 | 18603 | \tcode{template<class Fn, class... ArgTypes>}\br |
18604 | 18604 | \tcode{struct is_invocable;} & |
18605 | 18605 | The expression \tcode{\placeholdernc{INVOKE}(declval<Fn>(), declval<ArgTypes>()...)} |
18606 | | - is well-formed when treated as an unevaluated operand & |
| 18606 | + is well-formed when treated as an unevaluated operand\iref{term.unevaluated.operand} & |
18607 | 18607 | \tcode{Fn} and all types in the template parameter pack \tcode{ArgTypes} |
18608 | 18608 | shall be complete types, \cv{}~\keyword{void}, or |
18609 | 18609 | arrays of unknown bound. \\ \rowsep |
|
19067 | 19067 | \tcode{struct invoke_result;} |
19068 | 19068 | & |
19069 | 19069 | If the expression \tcode{\placeholdernc{INVOKE}(declval<Fn>(), declval<ArgTypes>()...)} |
19070 | | - is well-formed when treated as an unevaluated operand\iref{expr.prop}, |
| 19070 | + is well-formed when treated as an unevaluated operand\iref{term.unevaluated.operand}, |
19071 | 19071 | the member typedef \tcode{type} names the type |
19072 | 19072 | \tcode{decltype(\placeholdernc{INVOKE}(declval<Fn>(), declval<ArgTypes>()...))}; |
19073 | 19073 | otherwise, there shall be no member \tcode{type}. Access checking is |
|
22297 | 22297 | typename Context::template formatter_type<remove_cvref_t<T>>() |
22298 | 22298 | .format(declval<T&>(), declval<Context&>()) |
22299 | 22299 | \end{codeblock} |
22300 | | -shall be well-formed when treated as an unevaluated operand. |
| 22300 | +shall be well-formed when treated as an unevaluated operand\iref{term.unevaluated.operand}. |
22301 | 22301 |
|
22302 | 22302 | \pnum |
22303 | 22303 | \effects |
|
0 commit comments