2.3 KiB
[meta.define.static]
21 Metaprogramming library [meta]
21.4 Reflection [meta.reflection]
21.4.3 Promoting to static storage strings [meta.define.static]
The functions in this subclause promote compile-time storage into static storage.
template<ranges::[input_range](range.refinements#concept:input_range "25.4.6 Other range refinements [range.refinements]") R> consteval const ranges::range_value_t<R>* define_static_string(R&& r);
Effects: Equivalent to:return extract<const ranges::range_value_t*>(meta::reflect_constant_string(r));
template<ranges::[input_range](range.refinements#concept:input_range "25.4.6 Other range refinements [range.refinements]") R> consteval span<const ranges::range_value_t<R>> define_static_array(R&& r);
Effects: Equivalent to:using T = ranges::range_value_t; meta::info array = meta::reflect_constant_array(r);if (is_array_type(type_of(array))) {return span(extract<const T*>(array), extent(type_of(array)));} else {return span();}
template<class T> consteval const remove_cvref_t<T>* define_static_object(T&& t);
Effects: Equivalent to:using U = remove_cvref_t;if constexpr (is_class_type(^^U)) {return addressof(extract<const U&>(meta::reflect_constant(std::forward(t))));} else {return define_static_array(span(addressof(t), 1)).data();}
[Note 1:
For class types,define_static_object provides the address of the template parameter object ([temp.param]) that is template-argument equivalent to t.
â end note]