Files
cppdraft_translate/cppdraft/meta/define/static.md
2025-10-25 03:02:53 +03:00

2.3 KiB
Raw Blame History

[meta.define.static]

21 Metaprogramming library [meta]

21.4 Reflection [meta.reflection]

21.4.3 Promoting to static storage strings [meta.define.static]

1

#

The functions in this subclause promote compile-time storage into static storage.

🔗

template<ranges::[input_range](range.refinements#concept:input_range "25.4.6Other range refinements[range.refinements]") R> consteval const ranges::range_value_t<R>* define_static_string(R&& r);

2

#

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.6Other range refinements[range.refinements]") R> consteval span<const ranges::range_value_t<R>> define_static_array(R&& r);

3

#

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);

4

#

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();}

5

#

[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]