std::meta::reflect_constant_array
Определён в заголовке <meta> | ||
|---|---|---|
template< ranges::input_range R > consteval std::meta::info reflect_constant_array( R&& r ); | (начиная с C++26) |
Возвращает отражение, представляющее объект массива, элементы которого соответствуют элементам r.
Результирующий объект является объектом параметра шаблона: он имеет статическую длительность хранения, а диапазоны с содержимым, эквивалентным аргументам шаблона, соответствуют одному и тому же объекту.
Если размер r не равен нулю, результирующий объект массива является потенциально неуникальным объектом.
Пусть U — это ranges::range_value_t<R>, а T — это std::remove_all_extents_t<U>.
Программа некорректна, если выполняется любое из следующих условий:
-
Tне является структурным типом. -
Tне удовлетворяет концептуcopy_constructible. -
Uне является типом массива, аstd::is_constructible_v<T, ranges::range_reference_t<R>>имеет значение false.
Параметры
| r | - | входной input_range |
Возвращаемое значение
Если размер r не равен нулю, возвращается отражение, представляющее объект параметра шаблона типа const T[N] (где N — это размер r). Каждый элемент объекта параметра шаблона эквивалентен аргументу шаблона:
-
std::meta::reflect_constant_array(*it), еслиUявляется типом массива; -
std::meta::reflect_constant(static_cast<T>(*it))в противном случае;
где it — итератор, указывающий на соответствующий элемент r.
В противном случае (если размер r равен нулю) возвращается отражение, представляющее объект параметра шаблона типа const std::array<T, 0>, инициализированный значением {}.
Исключения
Может выбрасывать любое исключение, выброшенное:
- операцией над
rили над итераторами либо сентинеламиr; - любым аргументом
std::meta::reflect_constantили любым вызовомstd::meta::reflect_constant_array, описанным выше.
Выбрасывает std::meta::exception, если при любом вызове std::meta::reflect_constant выполнение завершилось бы выбрасыванием исключения.
Примечания
Результат std::meta::reflect_constant_array подходит для использования с std::meta::substitute. Если вызывающей стороне нужен std::span статического массива, а не значение отражения, обычно лучше подходит std::define_static_array.
Пример
См. также
|
(C++26) | перемещает массив времени компиляции в статическую память и возвращает span статического массива (шаблон функции) |
|
(C++26) | перемещает строку времени компиляции в статическую память и возвращает отражение, представляющее статическую строку (шаблон функции) |
|
(C++26) | возвращает отражение, представляющее значение или объект параметра шаблона, пригодное для использования в качестве константного аргумента шаблона (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/reflect_constant_array