consteval bool is_string_literal(const char* p);
consteval bool is_string_literal(const wchar_t* p);
consteval bool is_string_literal(const char8_t* p);
consteval bool is_string_literal(const char16_t* p);
consteval bool is_string_literal(const char32_t* p);
template<ranges::input_range R>
consteval const ranges::range_value_t<R>* define_static_string(R&& r);
template<ranges::input_range R>
consteval span<const ranges::range_value_t<R>> define_static_array(R&& r);
template<class T>
consteval const remove_cvref_t<T>* define_static_object(T&& t);
Constant | Corresponding operator-function-id | Operator symbol name |
op_new | operator new | new |
op_delete | operator delete | delete |
op_array_new | operator new[] | new[] |
op_array_delete | operator delete[] | delete[] |
op_co_await | operator co_await | co_await |
op_parentheses | operator() | () |
op_square_brackets | operator[] | [] |
op_arrow | operator-> | -> |
op_arrow_star | operator->* | ->* |
op_tilde | operator | |
op_exclamation | operator! | ! |
op_plus | operator+ | + |
op_minus | operator- | - |
op_star | operator* | * |
op_slash | operator/ | / |
op_percent | operator% | % |
op_caret | operator^ | ^ |
op_ampersand | operator& | & |
op_equals | operator= | = |
op_pipe | operator| | | |
op_plus_equals | operator+= | + |
op_minus_equals | operator-= | - |
op_star_equals | operator*= | * |
op_slash_equals | operator/= | / |
op_percent_equals | operator%= | % |
op_caret_equals | operator^= | ^= |
op_ampersand_equals | operator&= | & |
op_pipe_equals | operator|= | | |
op_equals_equals | operator== | == |
op_exclamation_equals | operator!= | != |
op_less | operator< | < |
op_greater | operator> | > |
op_less_equals | operator<= | <= |
op_greater_equals | operator>= | >= |
op_spaceship | operator<=> | <=> |
op_ampersand_ampersand | operator&& | && |
op_pipe_pipe | operator|| | || |
op_less_less | operator<< | << |
op_greater_greater | operator>> | >> |
op_less_less_equals | operator<<= | <<= |
op_greater_greater_equals | operator>>= | >>= |
op_plus_plus | operator++ | ++ |
op_minus_minus | operator-- | -- |
op_comma | operator, | , |
consteval operators operator_of(info r);
consteval string_view symbol_of(operators op);
consteval u8string_view u8symbol_of(operators op);
consteval bool has_identifier(info r);
consteval string_view identifier_of(info r);
consteval u8string_view u8identifier_of(info r);
consteval string_view display_string_of(info r);
consteval u8string_view u8display_string_of(info r);
consteval source_location source_location_of(info r);
consteval bool has-type(info r); // exposition only
consteval bool type_of(info r);
consteval info object_of(info r);
consteval info constant_of(info r);
consteval bool is_public(info r);
consteval bool is_protected(info r);
consteval bool is_private(info r);
consteval bool is_virtual(info r);
consteval bool is_pure_virtual(info r);
consteval bool is_override(info r);
consteval bool is_final(info r);
consteval bool is_deleted(info r);
consteval bool is_defaulted(info r);
consteval bool is_user_provided(info r);
consteval bool is_user_declared(info r);
consteval bool is_explicit(info r);
consteval bool is_noexcept(info r);
consteval bool is_bit_field(info r);
consteval bool is_enumerator(info r);
consteval bool is_annotation(info r);
consteval bool is_const(info r);
consteval bool is_volatile(info r);
consteval bool is_mutable_member(info r);
consteval bool is_lvalue_reference_qualified(info r);
consteval bool is_rvalue_reference_qualified(info r);
consteval bool has_static_storage_duration(info r);
consteval bool has_thread_storage_duration(info r);
consteval bool has_automatic_storage_duration(info r);
consteval bool has_internal_linkage(info r);
consteval bool has_module_linkage(info r);
consteval bool has_external_linkage(info r);
consteval bool has_c_language_linkage(info r);
consteval bool has_linkage(info r);
consteval bool is_complete_type(info r);
consteval bool is_enumerable_type(info r);
consteval bool is_variable(info r);
consteval bool is_type(info r);
consteval bool is_namespace(info r);
consteval bool is_type_alias(info r);
consteval bool is_namespace_alias(info r);
consteval bool is_function(info r);
consteval bool is_conversion_function(info r);
consteval bool is_operator_function(info r);
consteval bool is_literal_operator(info r);
consteval bool is_special_member_function(info r);
consteval bool is_constructor(info r);
consteval bool is_default_constructor(info r);
consteval bool is_copy_constructor(info r);
consteval bool is_move_constructor(info r);
consteval bool is_assignment(info r);
consteval bool is_copy_assignment(info r);
consteval bool is_move_assignment(info r);
consteval bool is_destructor(info r);
consteval bool is_function_parameter(info r);
consteval bool is_explicit_object_parameter(info r);
consteval bool has_default_argument(info r);
consteval bool has_ellipsis_parameter(info r);
consteval bool is_template(info r);
consteval bool is_function_template(info r);
consteval bool is_variable_template(info r);
consteval bool is_class_template(info r);
consteval bool is_alias_template(info r);
consteval bool is_conversion_function_template(info r);
consteval bool is_operator_function_template(info r);
consteval bool is_literal_operator_template(info r);
consteval bool is_constructor_template(info r);
consteval bool is_concept(info r);
consteval bool is_value(info r);
consteval bool is_object(info r);
consteval bool is_structured_binding(info r);
consteval bool is_class_member(info r);
consteval bool is_namespace_member(info r);
consteval bool is_nonstatic_data_member(info r);
consteval bool is_static_member(info r);
consteval bool is_base(info r);
consteval bool has_default_member_initializer(info r);
consteval bool has_parent(info r);
consteval info parent_of(info r);
consteval info dealias(info r);
consteval bool has_template_arguments(info r);
consteval info template_of(info r);
consteval vector<info> template_arguments_of(info r);
consteval vector<info> parameters_of(info r);
consteval info variable_of(info r);
consteval info return_type_of(info r);
consteval info scope() const;
consteval info designating_class() const;
static consteval access_context unprivileged() noexcept;
consteval bool is_accessible(info r, access_context ctx);
consteval bool has_inaccessible_nonstatic_data_members(info r, access_context ctx);
consteval bool has_inaccessible_bases(info r, access_context ctx);
consteval bool has_inaccessible_subobjects(info r, access_context ctx);
consteval vector<info> members_of(info r, access_context ctx);
consteval vector<info> bases_of(info type, access_context ctx);
consteval vector<info> static_data_members_of(info type, access_context ctx);
consteval vector<info> nonstatic_data_members_of(info type, access_context ctx);
consteval vector<info> subobjects_of(info type, access_context ctx);
consteval vector<info> enumerators_of(info type_enum);
struct member_offset {
ptrdiff_t bytes;
ptrdiff_t bits;
constexpr ptrdiff_t total_bits() const;
auto operator<=>(const member_offset&) const = default;
};
constexpr ptrdiff_t member_offset::total_bits() const;
consteval member_offset offset_of(info r);
consteval size_t size_of(info r);
consteval size_t alignment_of(info r);
consteval size_t bit_size_of(info r);
template<class T>
consteval T extract-ref(info r); // exposition only
template<class T>
consteval T extract-member-or-function(info r); // exposition only
template<class T>
consteval T extract-value(info r); // exposition only
template<class T>
consteval T extract(info r);
template<class R>
concept reflection_range =
ranges::input_range<R> &&
same_as<ranges::range_value_t<R>, info> &&
same_as<remove_cvref_t<ranges::range_reference_t<R>>, info>;
template<reflection_range R = initializer_list<info>>
consteval bool can_substitute(info templ, R&& arguments);
template<reflection_range R = initializer_list<info>>
consteval info substitute(info templ, R&& arguments);
template<class T>
consteval info reflect_constant(T expr);
template<class T>
consteval info reflect_object(T& expr);
template<class T>
consteval info reflect_function(T& expr);
template<ranges::input_range R>
consteval info reflect_constant_string(R&& r);
template<ranges::input_range R>
consteval info reflect_constant_array(R&& r);
template<class T>
requires constructible_from<u8string, T>
consteval data_member_options::name-type(T&& value);
template<class T>
requires constructible_from<string, T>
consteval data_member_options::name-type(T&& value);
consteval info data_member_spec(info type, data_member_options options);
consteval bool is_data_member_spec(info r);
template<reflection_range R = initializer_list<info>>
consteval info define_aggregate(info class_type, R&& mdescrs);
Signature and Return Type | Returns |
bool meta::UNARY(info type); bool meta::UNARY_type(info type); | std::UNARY_v<T>,
where T is the type or type alias represented by type |
bool meta::BINARY(info type); bool meta::BINARY_type(info type); | std::BINARY_v<T1, T2>,
where T1 and T2 are the types or type aliases
represented by t1 and t2, respectively |
template<reflection_range R> bool meta::VARIADIC_type(info type, R&& args); | std::VARIADIC_v<T, U...>,
where T is the type or type alias represented by type
and U... is the pack of types or type aliases
whose elements are represented by the corresponding elements of args |
template<reflection_range R> bool meta::VARIADIC_type(info t1, info t2, R&& args); | std::VARIADIC_v<T1, T2, U...>,
where T1 and T2 are the types or type aliases
represented by t1 and t2, respectively,
and U... is the pack of types or type aliases
whose elements are represented by the corresponding elements of args |
info meta::UNARY(info type); info meta::UNARY(info type); | A reflection representing the type denoted by
std::UNARY_t<T>,
where T is the type or type alias represented by type |
template<reflection_range R> info meta::VARIADIC(R&& args); | A reflection representing the type denoted by
std::VARIADIC_t<T...>,
where T... is the pack of types or type aliases
whose elements are represented by the corresponding elements of args |
template<reflection_range R> info meta::VARIADIC(info type, R&& args); | A reflection representing the type denoted by
std::VARIADIC_t<T, U...>,
where T is the type or type alias represented by type
and U... is the pack of types or type aliases
whose elements are represented by the corresponding elements of args |
consteval size_t rank(info type);
consteval size_t extent(info type, unsigned i = 0);
consteval size_t tuple_size(info type);
consteval info tuple_element(size_t index, info type);
consteval size_t variant_size(info type);
consteval info variant_alternative(size_t index, info type);
consteval strong_ordering type_order(info t1, info t2);
consteval vector<info> annotations_of(info item);
consteval vector<info> annotations_of_with_type(info item, info type);