Implement std::meta::is_{{,trivially_,nothrow_}constructible,{,trivially_}invocable}_type.

This commit is contained in:
Jakub Jelinek
2025-10-14 19:42:45 +02:00
committed by Marek Polacek
parent 1adfc2ff48
commit e1c0c5766c
8 changed files with 1607 additions and 1 deletions

View File

@@ -1005,7 +1005,7 @@ namespace ranges
// for use by __range_iter_t below.
template<typename _Tp>
requires is_array_v<_Tp> || __member_begin<_Tp&> || __adl_begin<_Tp&>
auto
constexpr auto
__begin(_Tp& __t)
{
if constexpr (is_array_v<_Tp>)

View File

@@ -269,6 +269,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
consteval size_t size_of(info);
consteval size_t bit_size_of(info);
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>;
// [meta.reflection.result], expression result reflection
template<typename _Tp>
requires (is_copy_constructible_v<_Tp>)
@@ -319,6 +324,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
consteval bool is_unbounded_array_type(info);
consteval bool is_scoped_enum_type(info);
template<reflection_range _R = initializer_list<info>>
consteval bool is_constructible_type(info, _R&&);
consteval bool is_default_constructible_type(info);
consteval bool is_copy_constructible_type(info);
consteval bool is_move_constructible_type(info);
@@ -329,6 +336,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
consteval bool is_destructible_type(info);
template<reflection_range _R = initializer_list<info>>
consteval bool is_trivially_constructible_type(info, _R&&);
consteval bool is_trivially_default_constructible_type(info);
consteval bool is_trivially_copy_constructible_type(info);
consteval bool is_trivially_move_constructible_type(info);
@@ -338,6 +347,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
consteval bool is_trivially_move_assignable_type(info);
consteval bool is_trivially_destructible_type(info);
template<reflection_range _R = initializer_list<info>>
consteval bool is_nothrow_constructible_type(info, _R&&);
consteval bool is_nothrow_default_constructible_type(info);
consteval bool is_nothrow_copy_constructible_type(info);
consteval bool is_nothrow_move_constructible_type(info);
@@ -369,6 +380,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
consteval bool is_layout_compatible_type(info, info);
consteval bool is_pointer_interconvertible_base_of_type(info, info);
template<reflection_range _R = initializer_list<info>>
consteval bool is_invocable_type(info, _R&&);
template<reflection_range _R = initializer_list<info>>
consteval bool is_nothrow_invocable_type(info, _R&&);
// associated with [meta.trans.cv], const-volatile modifications
consteval info remove_const(info);
consteval info remove_volatile(info);