std::define_static_object
Определён в заголовочном файле <meta> | ||
|---|---|---|
template< class T > consteval const remove_cvref_t<T>* define_static_object( T&& t ); | (начиная с C++26) |
Помещает значение в статическую память.
Эквивалентно:
using U = std::remove_cvref_t<T>;
if constexpr (std::meta::is_class_type(^^U) || std::meta::is_union_type(^^U))
{
std::meta::info obj = std::meta::reflect_constant(std::forward<T>(t));
return std::addressof(std::meta::extract<const U&>(obj));
}
else if constexpr (std::meta::is_array_type(^^U))
{
std::meta::info obj = std::meta::reflect_constant_array(std::forward<T>(t));
return std::addressof(std::meta::extract<const U&>(obj));
}
else
{
return std::define_static_array(std::span(std::addressof(t), 1)).data();
}
Параметры
| t | - | значение структурного типа |
Возвращаемое значение
Указатель на объект параметра шаблона со значением t.
Примечания
Поскольку результирующий объект является объектом параметра шаблона, он имеет статическую длительность хранения. Значения, эквивалентные с точки зрения аргументов шаблона, соответствуют одному и тому же объекту.
Результирующий объект является потенциально неуникальным объектом, если std::remove_cvref_t<T> является скалярным типом.
Если t является объектом параметра шаблона, результат указывает на тот же объект.
| Макрос проверки поддержки возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_define_static | 202506L | (C++26) |
std::define_static_object |
Пример
См. также
|
(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/define_static_object