|
2916 | 2916 | consteval bool is_string_literal(const char16_t* p);
|
2917 | 2917 | consteval bool is_string_literal(const char32_t* p);
|
2918 | 2918 |
|
2919 |
| - // \ref{meta.define.static}, promoting to static storage strings |
| 2919 | + // \ref{meta.define.static}, promoting to static storage |
| 2920 | + namespace meta { |
| 2921 | + template<ranges::@\libconcept{input_range}@ R> |
| 2922 | + consteval info reflect_constant_string(R&& r); |
| 2923 | + template<ranges::@\libconcept{input_range}@ R> |
| 2924 | + consteval info reflect_constant_array(R&& r); |
| 2925 | + } |
2920 | 2926 | template<ranges::@\libconcept{input_range}@ R>
|
2921 | 2927 | consteval const ranges::range_value_t<R>* define_static_string(R&& r);
|
2922 | 2928 | template<ranges::@\libconcept{input_range}@ R>
|
|
3101 | 3107 | template<class T>
|
3102 | 3108 | consteval info reflect_function(T& fn);
|
3103 | 3109 |
|
3104 |
| - // \ref{meta.reflection.array}, promoting to static storage arrays |
3105 |
| - template<ranges::@\libconcept{input_range}@ R> |
3106 |
| - consteval info reflect_constant_string(R&& r); |
3107 |
| - |
3108 |
| - template<ranges::@\libconcept{input_range}@ R> |
3109 |
| - consteval info reflect_constant_array(R&& r); |
3110 |
| - |
3111 | 3110 | // \ref{meta.reflection.define.aggregate}, class definition generation
|
3112 | 3111 | struct data_member_options;
|
3113 | 3112 | consteval info data_member_spec(info type, data_member_options options);
|
|
3370 | 3369 | \end{itemize}
|
3371 | 3370 | \end{itemdescr}
|
3372 | 3371 |
|
3373 |
| -\rSec2[meta.define.static]{Promoting to static storage strings} |
| 3372 | +\rSec2[meta.define.static]{Promoting to static storage} |
3374 | 3373 |
|
3375 | 3374 | \pnum
|
3376 | 3375 | The functions in this subclause promote compile-time storage into static storage.
|
3377 | 3376 |
|
| 3377 | +\indexlibraryglobal{reflect_constant_string}% |
| 3378 | +\begin{itemdecl} |
| 3379 | +template<ranges::@\libconcept{input_range}@ R> |
| 3380 | + consteval info reflect_constant_string(R&& r); |
| 3381 | +\end{itemdecl} |
| 3382 | + |
| 3383 | +\begin{itemdescr} |
| 3384 | +\pnum |
| 3385 | +Let \tcode{CharT} be \tcode{ranges::range_value_t<R>}. |
| 3386 | + |
| 3387 | +\pnum |
| 3388 | +\mandates |
| 3389 | +\tcode{CharT} is one of |
| 3390 | +\tcode{char}, |
| 3391 | +\tcode{wchar_t}, |
| 3392 | +\tcode{char8_t}, |
| 3393 | +\tcode{char16_t}, |
| 3394 | +\tcode{char32_t}. |
| 3395 | + |
| 3396 | +\pnum |
| 3397 | +Let $V$ be the pack of values of type \tcode{CharT} |
| 3398 | +whose elements are the corresponding elements of \tcode{r}, |
| 3399 | +except that if \tcode{r} refers to a string literal object, |
| 3400 | +then $V$ does not include the trailing null terminator of \tcode{r}. |
| 3401 | + |
| 3402 | +\pnum |
| 3403 | +Let $P$ be the template parameter object\iref{temp.param} |
| 3404 | +of type \tcode{const CharT[sizeof...(V) + 1]} |
| 3405 | +initialized with \tcode{\{$V$..., CharT()\}}. |
| 3406 | + |
| 3407 | +\pnum |
| 3408 | +\returns |
| 3409 | +\tcode{\reflexpr{$P$}}. |
| 3410 | + |
| 3411 | +\pnum |
| 3412 | +\begin{note} |
| 3413 | +$P$ is a potentially non-unique object\iref{intro.object}. |
| 3414 | +\end{note} |
| 3415 | +\end{itemdescr} |
| 3416 | + |
| 3417 | +\indexlibraryglobal{reflect_constant_array}% |
| 3418 | +\begin{itemdecl} |
| 3419 | +template<ranges::@\libconcept{input_range}@ R> |
| 3420 | + consteval info reflect_constant_array(R&& r); |
| 3421 | +\end{itemdecl} |
| 3422 | + |
| 3423 | +\begin{itemdescr} |
| 3424 | +\pnum |
| 3425 | +Let \tcode{T} be \tcode{ranges::range_value_t<R>}. |
| 3426 | + |
| 3427 | +\pnum |
| 3428 | +\mandates |
| 3429 | +\tcode{T} is a structural type\iref{temp.param}, |
| 3430 | +\tcode{is_constructible_v<T, ranges::range_reference_t<R>>} is \tcode{true}, and |
| 3431 | +\tcode{is_copy_constructible_v<T>} is \tcode{true}. |
| 3432 | + |
| 3433 | +\pnum |
| 3434 | +Let $V$ be the pack of values of type \tcode{info} |
| 3435 | +of the same size as \tcode{r}, |
| 3436 | +where the $i^\text{th}$ element is \tcode{reflect_constant($\tcode{e}_i$)}, |
| 3437 | +where $\tcode{e}_i$ is the $i^\text{th}$ element of \tcode{r}. |
| 3438 | + |
| 3439 | +\pnum |
| 3440 | +Let $P$ be |
| 3441 | +\begin{itemize} |
| 3442 | +\item |
| 3443 | + If \tcode{sizeof...($V$) > 0} is \tcode{true}, |
| 3444 | + then the template parameter object\iref{temp.param} |
| 3445 | + of type \tcode{const T[\brk{}sizeof...(\brk{}$V$)]} |
| 3446 | + initialized with \tcode{\{[:$V$:]...\}}. |
| 3447 | +\item |
| 3448 | + Otherwise, the template parameter object |
| 3449 | + of type \tcode{array<T, 0>} |
| 3450 | + initialized with \tcode{\{\}}. |
| 3451 | +\end{itemize} |
| 3452 | + |
| 3453 | +\pnum |
| 3454 | +\returns |
| 3455 | +\tcode{\reflexpr{$P$}}. |
| 3456 | + |
| 3457 | +\pnum |
| 3458 | +\throws |
| 3459 | +\tcode{meta::exception} unless |
| 3460 | +\tcode{reflect_constant(e)} is a constant subexpression |
| 3461 | +for every element \tcode{e} of \tcode{r}. |
| 3462 | + |
| 3463 | +\pnum |
| 3464 | +\begin{note} |
| 3465 | +$P$ is a potentially non-unique object\iref{intro.object}. |
| 3466 | +\end{note} |
| 3467 | +\end{itemdescr} |
| 3468 | + |
3378 | 3469 | \indexlibraryglobal{define_static_string}%
|
3379 | 3470 | \begin{itemdecl}
|
3380 | 3471 | template<ranges::@\libconcept{input_range}@ R>
|
|
6202 | 6293 | for a constant template parameter of type \tcode{T\&}\iref{temp.arg.nontype}.
|
6203 | 6294 | \end{itemdescr}
|
6204 | 6295 |
|
6205 |
| -\rSec2[meta.reflection.array]{Promoting to static storage arrays} |
6206 |
| - |
6207 |
| -\pnum |
6208 |
| -The functions in this subclause promote compile-time storage into static storage. |
6209 |
| - |
6210 |
| -\indexlibraryglobal{reflect_constant_string}% |
6211 |
| -\begin{itemdecl} |
6212 |
| -template<ranges::@\libconcept{input_range}@ R> |
6213 |
| - consteval info reflect_constant_string(R&& r); |
6214 |
| -\end{itemdecl} |
6215 |
| - |
6216 |
| -\begin{itemdescr} |
6217 |
| -\pnum |
6218 |
| -Let \tcode{CharT} be \tcode{ranges::range_value_t<R>}. |
6219 |
| - |
6220 |
| -\pnum |
6221 |
| -\mandates |
6222 |
| -\tcode{CharT} is one of |
6223 |
| -\tcode{char}, |
6224 |
| -\tcode{wchar_t}, |
6225 |
| -\tcode{char8_t}, |
6226 |
| -\tcode{char16_t}, |
6227 |
| -\tcode{char32_t}. |
6228 |
| - |
6229 |
| -\pnum |
6230 |
| -Let $V$ be the pack of values of type \tcode{CharT} |
6231 |
| -whose elements are the corresponding elements of \tcode{r}, |
6232 |
| -except that if \tcode{r} refers to a string literal object, |
6233 |
| -then $V$ does not include the trailing null terminator of \tcode{r}. |
6234 |
| - |
6235 |
| -\pnum |
6236 |
| -Let $P$ be the template parameter object\iref{temp.param} |
6237 |
| -of type \tcode{const CharT[sizeof...(V) + 1]} |
6238 |
| -initialized with \tcode{\{$V$..., CharT()\}}. |
6239 |
| - |
6240 |
| -\pnum |
6241 |
| -\returns |
6242 |
| -\tcode{\reflexpr{$P$}}. |
6243 |
| - |
6244 |
| -\pnum |
6245 |
| -\begin{note} |
6246 |
| -$P$ is a potentially non-unique object\iref{intro.object}. |
6247 |
| -\end{note} |
6248 |
| -\end{itemdescr} |
6249 |
| - |
6250 |
| -\indexlibraryglobal{reflect_constant_array}% |
6251 |
| -\begin{itemdecl} |
6252 |
| -template<ranges::@\libconcept{input_range}@ R> |
6253 |
| - consteval info reflect_constant_array(R&& r); |
6254 |
| -\end{itemdecl} |
6255 |
| - |
6256 |
| -\begin{itemdescr} |
6257 |
| -\pnum |
6258 |
| -Let \tcode{T} be \tcode{ranges::range_value_t<R>}. |
6259 |
| - |
6260 |
| -\pnum |
6261 |
| -\mandates |
6262 |
| -\tcode{T} is a structural type\iref{temp.param}, |
6263 |
| -\tcode{is_constructible_v<T, ranges::range_reference_t<R>>} is \tcode{true}, and |
6264 |
| -\tcode{is_copy_constructible_v<T>} is \tcode{true}. |
6265 |
| - |
6266 |
| -\pnum |
6267 |
| -Let $V$ be the pack of values of type \tcode{info} |
6268 |
| -of the same size as \tcode{r}, |
6269 |
| -where the $i^\text{th}$ element is \tcode{reflect_constant($\tcode{e}_i$)}, |
6270 |
| -where $\tcode{e}_i$ is the $i^\text{th}$ element of \tcode{r}. |
6271 |
| - |
6272 |
| -\pnum |
6273 |
| -Let $P$ be |
6274 |
| -\begin{itemize} |
6275 |
| -\item |
6276 |
| - If \tcode{sizeof...($V$) > 0} is \tcode{true}, |
6277 |
| - then the template parameter object\iref{temp.param} |
6278 |
| - of type \tcode{const T[\brk{}sizeof...(\brk{}$V$)]} |
6279 |
| - initialized with \tcode{\{[:$V$:]...\}}. |
6280 |
| -\item |
6281 |
| - Otherwise, the template parameter object |
6282 |
| - of type \tcode{array<T, 0>} |
6283 |
| - initialized with \tcode{\{\}}. |
6284 |
| -\end{itemize} |
6285 |
| - |
6286 |
| -\pnum |
6287 |
| -\returns |
6288 |
| -\tcode{\reflexpr{$P$}}. |
6289 |
| - |
6290 |
| -\pnum |
6291 |
| -\throws |
6292 |
| -\tcode{meta::exception} unless |
6293 |
| -\tcode{reflect_constant(e)} is a constant subexpression |
6294 |
| -for every element \tcode{e} of \tcode{r}. |
6295 |
| - |
6296 |
| -\pnum |
6297 |
| -\begin{note} |
6298 |
| -$P$ is a potentially non-unique object\iref{intro.object}. |
6299 |
| -\end{note} |
6300 |
| -\end{itemdescr} |
6301 |
| - |
6302 | 6296 | \rSec2[meta.reflection.define.aggregate]{Reflection class definition generation}
|
6303 | 6297 |
|
6304 | 6298 | \indexlibraryglobal{data_member_options}%
|
|
0 commit comments