[libc++] Granularize the rest of type_traits

Reviewed By: ldionne, #libc

Spies: libcxx-commits, mgorny

Differential Revision: https://reviews.llvm.org/D130471

NOKEYCHECK=True
GitOrigin-RevId: 7ae66e5e9593f0bc470b5796d50c5b8979f62665
diff --git a/include/module.modulemap.in b/include/module.modulemap.in
index 83c6384..12c9821 100644
--- a/include/module.modulemap.in
+++ b/include/module.modulemap.in
@@ -283,7 +283,10 @@
       module is_sorted                       { private header "__algorithm/is_sorted.h" }
       module is_sorted_until                 { private header "__algorithm/is_sorted_until.h" }
       module iter_swap                       { private header "__algorithm/iter_swap.h" }
-      module iterator_operations             { private header "__algorithm/iterator_operations.h" }
+      module iterator_operations             {
+        private header "__algorithm/iterator_operations.h"
+        export *
+      }
       module lexicographical_compare         { private header "__algorithm/lexicographical_compare.h" }
       module lower_bound                     { private header "__algorithm/lower_bound.h" }
       module make_heap                       { private header "__algorithm/make_heap.h" }
@@ -686,6 +689,7 @@
       module default_searcher           { private header "__functional/default_searcher.h" }
       module function                   { private header "__functional/function.h" }
       module hash                       { private header "__functional/hash.h" }
+      module hash_fwd                   { private header "__fwd/hash.h" }
       module identity                   { private header "__functional/identity.h" }
       module invoke                     { private header "__functional/invoke.h" }
       module is_transparent             { private header "__functional/is_transparent.h" }
@@ -1098,122 +1102,131 @@
     export functional.__functional.unwrap_ref
     export *
 
-    module add_const                          { private header "__type_traits/add_const.h" }
-    module add_cv                             { private header "__type_traits/add_cv.h" }
-    module add_lvalue_reference               { private header "__type_traits/add_lvalue_reference.h" }
-    module add_pointer                        { private header "__type_traits/add_pointer.h" }
-    module add_rvalue_reference               { private header "__type_traits/add_rvalue_reference.h" }
-    module add_volatile                       { private header "__type_traits/add_volatile.h" }
-    module aligned_storage                    { private header "__type_traits/aligned_storage.h" }
-    module aligned_union                      { private header "__type_traits/aligned_union.h" }
-    module alignment_of                       { private header "__type_traits/alignment_of.h" }
-    module apply_cv                           { private header "__type_traits/apply_cv.h" }
-    module common_reference                   { private header "__type_traits/common_reference.h" }
-    module common_type                        { private header "__type_traits/common_type.h" }
-    module conditional                        { private header "__type_traits/conditional.h" }
-    module conjunction                        { private header "__type_traits/conjunction.h" }
-    module copy_cv                            { private header "__type_traits/copy_cv.h" }
-    module copy_cvref                         { private header "__type_traits/copy_cvref.h" }
-    module decay                              { private header "__type_traits/decay.h" }
-    module disjunction                        { private header "__type_traits/disjunction.h" }
-    module enable_if                          { private header "__type_traits/enable_if.h" }
-    module extent                             { private header "__type_traits/extent.h" }
-    module has_unique_object_representation   { private header "__type_traits/has_unique_object_representation.h" }
-    module has_virtual_destructor             { private header "__type_traits/has_virtual_destructor.h" }
-    module integral_constant                  { private header "__type_traits/integral_constant.h" }
-    module is_abstract                        { private header "__type_traits/is_abstract.h" }
-    module is_aggregate                       { private header "__type_traits/is_aggregate.h" }
-    module is_arithmetic                      { private header "__type_traits/is_arithmetic.h" }
-    module is_array                           { private header "__type_traits/is_array.h" }
-    module is_assignable                      { private header "__type_traits/is_assignable.h" }
-    module is_base_of                         { private header "__type_traits/is_base_of.h" }
-    module is_bounded_array                   { private header "__type_traits/is_bounded_array.h" }
-    module is_callable                        { private header "__type_traits/is_callable.h" }
-    module is_class                           { private header "__type_traits/is_class.h" }
-    module is_compound                        { private header "__type_traits/is_compound.h" }
-    module is_const                           { private header "__type_traits/is_const.h" }
-    module is_constant_evaluated              { private header "__type_traits/is_constant_evaluated.h" }
-    module is_constructible                   { private header "__type_traits/is_constructible.h" }
-    module is_convertible                     { private header "__type_traits/is_convertible.h" }
-    module is_copy_assignable                 { private header "__type_traits/is_copy_assignable.h" }
-    module is_copy_constructible              { private header "__type_traits/is_copy_constructible.h" }
-    module is_core_convertible                { private header "__type_traits/is_core_convertible.h" }
-    module is_default_constructible           { private header "__type_traits/is_default_constructible.h" }
-    module is_destructible                    { private header "__type_traits/is_destructible.h" }
-    module is_empty                           { private header "__type_traits/is_empty.h" }
-    module is_enum                            { private header "__type_traits/is_enum.h" }
-    module is_final                           { private header "__type_traits/is_final.h" }
-    module is_floating_point                  { private header "__type_traits/is_floating_point.h" }
-    module is_function                        { private header "__type_traits/is_function.h" }
-    module is_fundamental                     { private header "__type_traits/is_fundamental.h" }
-    module is_integral                        { private header "__type_traits/is_integral.h" }
-    module is_literal_type                    { private header "__type_traits/is_literal_type.h" }
-    module is_member_function_pointer         { private header "__type_traits/is_member_function_pointer.h" }
-    module is_member_object_pointer           { private header "__type_traits/is_member_object_pointer.h" }
-    module is_member_pointer                  { private header "__type_traits/is_member_pointer.h" }
-    module is_move_assignable                 { private header "__type_traits/is_move_assignable.h" }
-    module is_move_constructible              { private header "__type_traits/is_move_constructible.h" }
-    module is_nothrow_assignable              { private header "__type_traits/is_nothrow_assignable.h" }
-    module is_nothrow_constructible           { private header "__type_traits/is_nothrow_constructible.h" }
-    module is_nothrow_convertible             { private header "__type_traits/is_nothrow_convertible.h" }
-    module is_nothrow_copy_assignable         { private header "__type_traits/is_nothrow_copy_assignable.h" }
-    module is_nothrow_copy_constructible      { private header "__type_traits/is_nothrow_copy_constructible.h" }
-    module is_nothrow_default_constructible   { private header "__type_traits/is_nothrow_default_constructible.h" }
-    module is_nothrow_destructible            { private header "__type_traits/is_nothrow_destructible.h" }
-    module is_nothrow_move_assignable         { private header "__type_traits/is_nothrow_move_assignable.h" }
-    module is_nothrow_move_constructible      { private header "__type_traits/is_nothrow_move_constructible.h" }
-    module is_null_pointer                    { private header "__type_traits/is_null_pointer.h" }
-    module is_object                          { private header "__type_traits/is_object.h" }
-    module is_pod                             { private header "__type_traits/is_pod.h" }
-    module is_pointer                         { private header "__type_traits/is_pointer.h" }
-    module is_polymorphic                     { private header "__type_traits/is_polymorphic.h" }
-    module is_primary_template                { private header "__type_traits/is_primary_template.h" }
-    module is_reference                       { private header "__type_traits/is_reference.h" }
-    module is_reference_wrapper               { private header "__type_traits/is_reference_wrapper.h" }
-    module is_referenceable                   { private header "__type_traits/is_referenceable.h" }
-    module is_same                            { private header "__type_traits/is_same.h" }
-    module is_scalar                          { private header "__type_traits/is_scalar.h" }
-    module is_scoped_enum                     { private header "__type_traits/is_scoped_enum.h" }
-    module is_signed                          { private header "__type_traits/is_signed.h" }
-    module is_signed_integer                  { private header "__type_traits/is_signed_integer.h" }
-    module is_standard_layout                 { private header "__type_traits/is_standard_layout.h" }
-    module is_trivial                         { private header "__type_traits/is_trivial.h" }
-    module is_trivially_assignable            { private header "__type_traits/is_trivially_assignable.h" }
-    module is_trivially_constructible         { private header "__type_traits/is_trivially_constructible.h" }
-    module is_trivially_copy_assignable       { private header "__type_traits/is_trivially_copy_assignable.h" }
-    module is_trivially_copy_constructible    { private header "__type_traits/is_trivially_copy_constructible.h" }
-    module is_trivially_copyable              { private header "__type_traits/is_trivially_copyable.h" }
-    module is_trivially_default_constructible { private header "__type_traits/is_trivially_default_constructible.h" }
-    module is_trivially_destructible          { private header "__type_traits/is_trivially_destructible.h" }
-    module is_trivially_move_assignable       { private header "__type_traits/is_trivially_move_assignable.h" }
-    module is_trivially_move_constructible    { private header "__type_traits/is_trivially_move_constructible.h" }
-    module is_unbounded_array                 { private header "__type_traits/is_unbounded_array.h" }
-    module is_union                           { private header "__type_traits/is_union.h" }
-    module is_unsigned                        { private header "__type_traits/is_unsigned.h" }
-    module is_unsigned_integer                { private header "__type_traits/is_unsigned_integer.h" }
-    module is_valid_expansion                 { private header "__type_traits/is_valid_expansion.h" }
-    module is_void                            { private header "__type_traits/is_void.h" }
-    module is_volatile                        { private header "__type_traits/is_volatile.h" }
-    module lazy                               { private header "__type_traits/lazy.h" }
-    module make_32_64_or_128_bit              { private header "__type_traits/make_32_64_or_128_bit.h" }
-    module make_signed                        { private header "__type_traits/make_signed.h" }
-    module make_unsigned                      { private header "__type_traits/make_unsigned.h" }
-    module nat                                { private header "__type_traits/nat.h" }
-    module negation                           { private header "__type_traits/negation.h" }
-    module promote                            { private header "__type_traits/promote.h" }
-    module rank                               { private header "__type_traits/rank.h" }
-    module remove_all_extents                 { private header "__type_traits/remove_all_extents.h" }
-    module remove_const                       { private header "__type_traits/remove_const.h" }
-    module remove_cv                          { private header "__type_traits/remove_cv.h" }
-    module remove_cvref                       { private header "__type_traits/remove_cvref.h" }
-    module remove_extent                      { private header "__type_traits/remove_extent.h" }
-    module remove_pointer                     { private header "__type_traits/remove_pointer.h" }
-    module remove_reference                   { private header "__type_traits/remove_reference.h" }
-    module remove_volatile                    { private header "__type_traits/remove_volatile.h" }
-    module type_identity                      { private header "__type_traits/type_identity.h" }
-    module type_list                          { private header "__type_traits/type_list.h" }
-    module underlying_type                    { private header "__type_traits/underlying_type.h" }
-    module void_t                             { private header "__type_traits/void_t.h" }
+    module add_const                           { private header "__type_traits/add_const.h" }
+    module add_cv                              { private header "__type_traits/add_cv.h" }
+    module add_lvalue_reference                { private header "__type_traits/add_lvalue_reference.h" }
+    module add_pointer                         { private header "__type_traits/add_pointer.h" }
+    module add_rvalue_reference                { private header "__type_traits/add_rvalue_reference.h" }
+    module add_volatile                        { private header "__type_traits/add_volatile.h" }
+    module aligned_storage                     { private header "__type_traits/aligned_storage.h" }
+    module aligned_union                       { private header "__type_traits/aligned_union.h" }
+    module alignment_of                        { private header "__type_traits/alignment_of.h" }
+    module apply_cv                            { private header "__type_traits/apply_cv.h" }
+    module can_extract_key                     { private header "__type_traits/can_extract_key.h" }
+    module common_reference                    { private header "__type_traits/common_reference.h" }
+    module common_type                         { private header "__type_traits/common_type.h" }
+    module conditional                         { private header "__type_traits/conditional.h" }
+    module conjunction                         { private header "__type_traits/conjunction.h" }
+    module copy_cv                             { private header "__type_traits/copy_cv.h" }
+    module copy_cvref                          { private header "__type_traits/copy_cvref.h" }
+    module decay                               { private header "__type_traits/decay.h" }
+    module dependent_type                      { private header "__type_traits/dependent_type.h" }
+    module disjunction                         { private header "__type_traits/disjunction.h" }
+    module enable_if                           { private header "__type_traits/enable_if.h" }
+    module extent                              { private header "__type_traits/extent.h" }
+    module has_unique_object_representation    { private header "__type_traits/has_unique_object_representation.h" }
+    module has_virtual_destructor              { private header "__type_traits/has_virtual_destructor.h" }
+    module integral_constant                   { private header "__type_traits/integral_constant.h" }
+    module is_abstract                         { private header "__type_traits/is_abstract.h" }
+    module is_aggregate                        { private header "__type_traits/is_aggregate.h" }
+    module is_arithmetic                       { private header "__type_traits/is_arithmetic.h" }
+    module is_array                            { private header "__type_traits/is_array.h" }
+    module is_assignable                       { private header "__type_traits/is_assignable.h" }
+    module is_base_of                          { private header "__type_traits/is_base_of.h" }
+    module is_bounded_array                    { private header "__type_traits/is_bounded_array.h" }
+    module is_callable                         { private header "__type_traits/is_callable.h" }
+    module is_char_like_type                   { private header "__type_traits/is_char_like_type.h" }
+    module is_class                            { private header "__type_traits/is_class.h" }
+    module is_compound                         { private header "__type_traits/is_compound.h" }
+    module is_const                            { private header "__type_traits/is_const.h" }
+    module is_constant_evaluated               { private header "__type_traits/is_constant_evaluated.h" }
+    module is_constructible                    { private header "__type_traits/is_constructible.h" }
+    module is_convertible                      { private header "__type_traits/is_convertible.h" }
+    module is_copy_assignable                  { private header "__type_traits/is_copy_assignable.h" }
+    module is_copy_constructible               { private header "__type_traits/is_copy_constructible.h" }
+    module is_core_convertible                 { private header "__type_traits/is_core_convertible.h" }
+    module is_default_constructible            { private header "__type_traits/is_default_constructible.h" }
+    module is_destructible                     { private header "__type_traits/is_destructible.h" }
+    module is_empty                            { private header "__type_traits/is_empty.h" }
+    module is_enum                             { private header "__type_traits/is_enum.h" }
+    module is_final                            { private header "__type_traits/is_final.h" }
+    module is_floating_point                   { private header "__type_traits/is_floating_point.h" }
+    module is_function                         { private header "__type_traits/is_function.h" }
+    module is_fundamental                      { private header "__type_traits/is_fundamental.h" }
+    module is_implicitly_default_constructible { private header "__type_traits/is_implicitly_default_constructible.h" }
+    module is_integral                         { private header "__type_traits/is_integral.h" }
+    module is_literal_type                     { private header "__type_traits/is_literal_type.h" }
+    module is_member_function_pointer          { private header "__type_traits/is_member_function_pointer.h" }
+    module is_member_object_pointer            { private header "__type_traits/is_member_object_pointer.h" }
+    module is_member_pointer                   { private header "__type_traits/is_member_pointer.h" }
+    module is_move_assignable                  { private header "__type_traits/is_move_assignable.h" }
+    module is_move_constructible               { private header "__type_traits/is_move_constructible.h" }
+    module is_nothrow_assignable               { private header "__type_traits/is_nothrow_assignable.h" }
+    module is_nothrow_constructible            { private header "__type_traits/is_nothrow_constructible.h" }
+    module is_nothrow_convertible              { private header "__type_traits/is_nothrow_convertible.h" }
+    module is_nothrow_copy_assignable          { private header "__type_traits/is_nothrow_copy_assignable.h" }
+    module is_nothrow_copy_constructible       { private header "__type_traits/is_nothrow_copy_constructible.h" }
+    module is_nothrow_default_constructible    { private header "__type_traits/is_nothrow_default_constructible.h" }
+    module is_nothrow_destructible             { private header "__type_traits/is_nothrow_destructible.h" }
+    module is_nothrow_move_assignable          { private header "__type_traits/is_nothrow_move_assignable.h" }
+    module is_nothrow_move_constructible       { private header "__type_traits/is_nothrow_move_constructible.h" }
+    module is_null_pointer                     { private header "__type_traits/is_null_pointer.h" }
+    module is_object                           { private header "__type_traits/is_object.h" }
+    module is_pod                              { private header "__type_traits/is_pod.h" }
+    module is_pointer                          { private header "__type_traits/is_pointer.h" }
+    module is_polymorphic                      { private header "__type_traits/is_polymorphic.h" }
+    module is_primary_template                 { private header "__type_traits/is_primary_template.h" }
+    module is_reference                        { private header "__type_traits/is_reference.h" }
+    module is_reference_wrapper                { private header "__type_traits/is_reference_wrapper.h" }
+    module is_referenceable                    { private header "__type_traits/is_referenceable.h" }
+    module is_same                             { private header "__type_traits/is_same.h" }
+    module is_scalar                           { private header "__type_traits/is_scalar.h" }
+    module is_scoped_enum                      { private header "__type_traits/is_scoped_enum.h" }
+    module is_signed                           { private header "__type_traits/is_signed.h" }
+    module is_signed_integer                   { private header "__type_traits/is_signed_integer.h" }
+    module is_standard_layout                  { private header "__type_traits/is_standard_layout.h" }
+    module is_swappable                        { private header "__type_traits/is_swappable.h" }
+    module is_trivial                          { private header "__type_traits/is_trivial.h" }
+    module is_trivially_assignable             { private header "__type_traits/is_trivially_assignable.h" }
+    module is_trivially_constructible          { private header "__type_traits/is_trivially_constructible.h" }
+    module is_trivially_copy_assignable        { private header "__type_traits/is_trivially_copy_assignable.h" }
+    module is_trivially_copy_constructible     { private header "__type_traits/is_trivially_copy_constructible.h" }
+    module is_trivially_copyable               { private header "__type_traits/is_trivially_copyable.h" }
+    module is_trivially_default_constructible  { private header "__type_traits/is_trivially_default_constructible.h" }
+    module is_trivially_destructible           { private header "__type_traits/is_trivially_destructible.h" }
+    module is_trivially_move_assignable        { private header "__type_traits/is_trivially_move_assignable.h" }
+    module is_trivially_move_constructible     { private header "__type_traits/is_trivially_move_constructible.h" }
+    module is_unbounded_array                  { private header "__type_traits/is_unbounded_array.h" }
+    module is_union                            { private header "__type_traits/is_union.h" }
+    module is_unsigned                         { private header "__type_traits/is_unsigned.h" }
+    module is_unsigned_integer                 { private header "__type_traits/is_unsigned_integer.h" }
+    module is_valid_expansion                  { private header "__type_traits/is_valid_expansion.h" }
+    module is_void                             { private header "__type_traits/is_void.h" }
+    module is_volatile                         { private header "__type_traits/is_volatile.h" }
+    module lazy                                { private header "__type_traits/lazy.h" }
+    module make_32_64_or_128_bit               { private header "__type_traits/make_32_64_or_128_bit.h" }
+    module make_const_lvalue_ref               { private header "__type_traits/make_const_lvalue_ref.h" }
+    module make_signed                         { private header "__type_traits/make_signed.h" }
+    module make_unsigned                       { private header "__type_traits/make_unsigned.h" }
+    module maybe_const                         { private header "__type_traits/maybe_const.h" }
+    module nat                                 { private header "__type_traits/nat.h" }
+    module negation                            { private header "__type_traits/negation.h" }
+    module promote                             { private header "__type_traits/promote.h" }
+    module rank                                { private header "__type_traits/rank.h" }
+    module remove_all_extents                  { private header "__type_traits/remove_all_extents.h" }
+    module remove_const                        { private header "__type_traits/remove_const.h" }
+    module remove_const_ref                    { private header "__type_traits/remove_const_ref.h" }
+    module remove_cv                           { private header "__type_traits/remove_cv.h" }
+    module remove_cvref                        { private header "__type_traits/remove_cvref.h" }
+    module remove_extent                       { private header "__type_traits/remove_extent.h" }
+    module remove_pointer                      { private header "__type_traits/remove_pointer.h" }
+    module remove_reference                    { private header "__type_traits/remove_reference.h" }
+    module remove_volatile                     { private header "__type_traits/remove_volatile.h" }
+    module result_of                           { private header "__type_traits/result_of.h" }
+    module type_identity                       { private header "__type_traits/type_identity.h" }
+    module type_list                           { private header "__type_traits/type_list.h" }
+    module underlying_type                     { private header "__type_traits/underlying_type.h" }
+    module void_t                              { private header "__type_traits/void_t.h" }
   }
   module typeindex {
     header "typeindex"
@@ -1242,6 +1255,7 @@
       module as_const            { private header "__utility/as_const.h" }
       module auto_cast           { private header "__utility/auto_cast.h" }
       module cmp                 { private header "__utility/cmp.h" }
+      module convert_to_integral { private header "__utility/convert_to_integral.h" }
       module declval             { private header "__utility/declval.h" }
       module exchange            { private header "__utility/exchange.h" }
       module forward             { private header "__utility/forward.h" }
@@ -1249,6 +1263,7 @@
       module integer_sequence    { private header "__utility/integer_sequence.h" }
       module move                { private header "__utility/move.h" }
       module pair                { private header "__utility/pair.h" }
+      module pair_fwd            { private header "__fwd/pair.h" }
       module piecewise_construct { private header "__utility/piecewise_construct.h" }
       module priority_tag        { private header "__utility/priority_tag.h" }
       module rel_ops             { private header "__utility/rel_ops.h" }