From ec96df5c3cfa30ee7d720f11dc7cc8b46f0e76d0 Mon Sep 17 00:00:00 2001 From: Nikolas Klauser Date: Fri, 4 Jul 2025 11:13:32 +0200 Subject: [PATCH] [libc++][NFC] Merge add_{r,l}value_reference.h --- libcxx/include/CMakeLists.txt | 3 +- libcxx/include/__concepts/common_with.h | 2 +- libcxx/include/__memory/shared_ptr.h | 2 +- libcxx/include/__memory/unique_ptr.h | 2 +- ...add_lvalue_reference.h => add_reference.h} | 24 +++++++++-- .../__type_traits/add_rvalue_reference.h | 40 ------------------- libcxx/include/__type_traits/copy_cvref.h | 3 +- libcxx/include/__type_traits/is_assignable.h | 3 +- .../include/__type_traits/is_bounded_array.h | 21 +++------- .../include/__type_traits/is_constructible.h | 3 +- .../__type_traits/is_nothrow_assignable.h | 3 +- .../__type_traits/is_nothrow_constructible.h | 3 +- libcxx/include/__type_traits/is_swappable.h | 2 +- .../__type_traits/is_trivially_assignable.h | 3 +- .../is_trivially_constructible.h | 3 +- libcxx/include/experimental/memory | 2 +- libcxx/include/future | 2 +- libcxx/include/module.modulemap.in | 3 +- libcxx/include/type_traits | 3 +- 19 files changed, 42 insertions(+), 85 deletions(-) rename libcxx/include/__type_traits/{add_lvalue_reference.h => add_reference.h} (61%) delete mode 100644 libcxx/include/__type_traits/add_rvalue_reference.h diff --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt index c334b25574305..4c1f28de99b1a 100644 --- a/libcxx/include/CMakeLists.txt +++ b/libcxx/include/CMakeLists.txt @@ -778,9 +778,8 @@ set(files __tuple/tuple_size.h __tuple/tuple_types.h __type_traits/add_cv_quals.h - __type_traits/add_lvalue_reference.h __type_traits/add_pointer.h - __type_traits/add_rvalue_reference.h + __type_traits/add_reference.h __type_traits/aligned_storage.h __type_traits/aligned_union.h __type_traits/alignment_of.h diff --git a/libcxx/include/__concepts/common_with.h b/libcxx/include/__concepts/common_with.h index 85abb05efbc29..09082b2295def 100644 --- a/libcxx/include/__concepts/common_with.h +++ b/libcxx/include/__concepts/common_with.h @@ -12,7 +12,7 @@ #include <__concepts/common_reference_with.h> #include <__concepts/same_as.h> #include <__config> -#include <__type_traits/add_lvalue_reference.h> +#include <__type_traits/add_reference.h> #include <__type_traits/common_reference.h> #include <__type_traits/common_type.h> #include <__utility/declval.h> diff --git a/libcxx/include/__memory/shared_ptr.h b/libcxx/include/__memory/shared_ptr.h index f1b2e2dbfc0cd..0cbd995105671 100644 --- a/libcxx/include/__memory/shared_ptr.h +++ b/libcxx/include/__memory/shared_ptr.h @@ -34,7 +34,7 @@ #include <__memory/shared_count.h> #include <__memory/uninitialized_algorithms.h> #include <__memory/unique_ptr.h> -#include <__type_traits/add_lvalue_reference.h> +#include <__type_traits/add_reference.h> #include <__type_traits/conditional.h> #include <__type_traits/conjunction.h> #include <__type_traits/disjunction.h> diff --git a/libcxx/include/__memory/unique_ptr.h b/libcxx/include/__memory/unique_ptr.h index 3e8d3cd6a4097..eff24546cdc01 100644 --- a/libcxx/include/__memory/unique_ptr.h +++ b/libcxx/include/__memory/unique_ptr.h @@ -24,7 +24,7 @@ #include <__memory/auto_ptr.h> #include <__memory/compressed_pair.h> #include <__memory/pointer_traits.h> -#include <__type_traits/add_lvalue_reference.h> +#include <__type_traits/add_reference.h> #include <__type_traits/common_type.h> #include <__type_traits/conditional.h> #include <__type_traits/dependent_type.h> diff --git a/libcxx/include/__type_traits/add_lvalue_reference.h b/libcxx/include/__type_traits/add_reference.h similarity index 61% rename from libcxx/include/__type_traits/add_lvalue_reference.h rename to libcxx/include/__type_traits/add_reference.h index 81a97ff0c73d2..c6f5d63d26dea 100644 --- a/libcxx/include/__type_traits/add_lvalue_reference.h +++ b/libcxx/include/__type_traits/add_reference.h @@ -6,8 +6,8 @@ // //===----------------------------------------------------------------------===// -#ifndef _LIBCPP___TYPE_TRAITS_ADD_LVALUE_REFERENCE_H -#define _LIBCPP___TYPE_TRAITS_ADD_LVALUE_REFERENCE_H +#ifndef _LIBCPP___TYPE_TRAITS_ADD_REFERENCE_H +#define _LIBCPP___TYPE_TRAITS_ADD_REFERENCE_H #include <__config> @@ -35,6 +35,24 @@ template using add_lvalue_reference_t = __add_lvalue_reference_t<_Tp>; #endif +template +struct _LIBCPP_NO_SPECIALIZATIONS add_rvalue_reference { + using type _LIBCPP_NODEBUG = __add_rvalue_reference(_Tp); +}; + +#ifdef _LIBCPP_COMPILER_GCC +template +using __add_rvalue_reference_t _LIBCPP_NODEBUG = typename add_rvalue_reference<_Tp>::type; +#else +template +using __add_rvalue_reference_t _LIBCPP_NODEBUG = __add_rvalue_reference(_Tp); +#endif + +#if _LIBCPP_STD_VER >= 14 +template +using add_rvalue_reference_t = __add_rvalue_reference_t<_Tp>; +#endif + _LIBCPP_END_NAMESPACE_STD -#endif // _LIBCPP___TYPE_TRAITS_ADD_LVALUE_REFERENCE_H +#endif // _LIBCPP___TYPE_TRAITS_ADD_REFERENCE_H diff --git a/libcxx/include/__type_traits/add_rvalue_reference.h b/libcxx/include/__type_traits/add_rvalue_reference.h deleted file mode 100644 index 153164675a6d7..0000000000000 --- a/libcxx/include/__type_traits/add_rvalue_reference.h +++ /dev/null @@ -1,40 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP___TYPE_TRAITS_ADD_RVALUE_REFERENCE_H -#define _LIBCPP___TYPE_TRAITS_ADD_RVALUE_REFERENCE_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct _LIBCPP_NO_SPECIALIZATIONS add_rvalue_reference { - using type _LIBCPP_NODEBUG = __add_rvalue_reference(_Tp); -}; - -#ifdef _LIBCPP_COMPILER_GCC -template -using __add_rvalue_reference_t _LIBCPP_NODEBUG = typename add_rvalue_reference<_Tp>::type; -#else -template -using __add_rvalue_reference_t _LIBCPP_NODEBUG = __add_rvalue_reference(_Tp); -#endif - -#if _LIBCPP_STD_VER >= 14 -template -using add_rvalue_reference_t = __add_rvalue_reference_t<_Tp>; -#endif - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___TYPE_TRAITS_ADD_RVALUE_REFERENCE_H diff --git a/libcxx/include/__type_traits/copy_cvref.h b/libcxx/include/__type_traits/copy_cvref.h index 158e5a5d78bb3..39002347d4a94 100644 --- a/libcxx/include/__type_traits/copy_cvref.h +++ b/libcxx/include/__type_traits/copy_cvref.h @@ -10,8 +10,7 @@ #define _LIBCPP___TYPE_TRAITS_COPY_CVREF_H #include <__config> -#include <__type_traits/add_lvalue_reference.h> -#include <__type_traits/add_rvalue_reference.h> +#include <__type_traits/add_reference.h> #include <__type_traits/copy_cv.h> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) diff --git a/libcxx/include/__type_traits/is_assignable.h b/libcxx/include/__type_traits/is_assignable.h index 253e86ba774ea..da9080db3b76f 100644 --- a/libcxx/include/__type_traits/is_assignable.h +++ b/libcxx/include/__type_traits/is_assignable.h @@ -10,8 +10,7 @@ #define _LIBCPP___TYPE_TRAITS_IS_ASSIGNABLE_H #include <__config> -#include <__type_traits/add_lvalue_reference.h> -#include <__type_traits/add_rvalue_reference.h> +#include <__type_traits/add_reference.h> #include <__type_traits/integral_constant.h> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) diff --git a/libcxx/include/__type_traits/is_bounded_array.h b/libcxx/include/__type_traits/is_bounded_array.h index aec488826ec44..8a41e07aa019b 100644 --- a/libcxx/include/__type_traits/is_bounded_array.h +++ b/libcxx/include/__type_traits/is_bounded_array.h @@ -10,7 +10,6 @@ #define _LIBCPP___TYPE_TRAITS_IS_BOUNDED_ARRAY_H #include <__config> -#include <__cstddef/size_t.h> #include <__type_traits/integral_constant.h> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) @@ -19,26 +18,16 @@ _LIBCPP_BEGIN_NAMESPACE_STD -template -inline const bool __is_bounded_array_v = false; -template -inline const bool __is_bounded_array_v<_Tp[_Np]> = true; +template +inline const bool __is_bounded_array_v = __is_bounded_array(_Tp); #if _LIBCPP_STD_VER >= 20 -template -struct _LIBCPP_NO_SPECIALIZATIONS is_bounded_array : false_type {}; - -_LIBCPP_DIAGNOSTIC_PUSH -# if __has_warning("-Winvalid-specialization") -_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Winvalid-specialization") -# endif -template -struct is_bounded_array<_Tp[_Np]> : true_type {}; -_LIBCPP_DIAGNOSTIC_POP +template +struct _LIBCPP_NO_SPECIALIZATIONS is_bounded_array : bool_constant<__is_bounded_array(_Tp)> {}; template -_LIBCPP_NO_SPECIALIZATIONS inline constexpr bool is_bounded_array_v = is_bounded_array<_Tp>::value; +_LIBCPP_NO_SPECIALIZATIONS inline constexpr bool is_bounded_array_v = __is_bounded_array(_Tp); #endif diff --git a/libcxx/include/__type_traits/is_constructible.h b/libcxx/include/__type_traits/is_constructible.h index feafb70b1f684..28d3048719b03 100644 --- a/libcxx/include/__type_traits/is_constructible.h +++ b/libcxx/include/__type_traits/is_constructible.h @@ -10,8 +10,7 @@ #define _LIBCPP___TYPE_IS_CONSTRUCTIBLE_H #include <__config> -#include <__type_traits/add_lvalue_reference.h> -#include <__type_traits/add_rvalue_reference.h> +#include <__type_traits/add_reference.h> #include <__type_traits/integral_constant.h> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) diff --git a/libcxx/include/__type_traits/is_nothrow_assignable.h b/libcxx/include/__type_traits/is_nothrow_assignable.h index 903dead4435e8..15ad047c566e3 100644 --- a/libcxx/include/__type_traits/is_nothrow_assignable.h +++ b/libcxx/include/__type_traits/is_nothrow_assignable.h @@ -10,8 +10,7 @@ #define _LIBCPP___TYPE_TRAITS_IS_NOTHROW_ASSIGNABLE_H #include <__config> -#include <__type_traits/add_lvalue_reference.h> -#include <__type_traits/add_rvalue_reference.h> +#include <__type_traits/add_reference.h> #include <__type_traits/integral_constant.h> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) diff --git a/libcxx/include/__type_traits/is_nothrow_constructible.h b/libcxx/include/__type_traits/is_nothrow_constructible.h index bd14c1c40516f..bc4c2ee45b9f5 100644 --- a/libcxx/include/__type_traits/is_nothrow_constructible.h +++ b/libcxx/include/__type_traits/is_nothrow_constructible.h @@ -10,8 +10,7 @@ #define _LIBCPP___TYPE_TRAITS_IS_NOTHROW_CONSTRUCTIBLE_H #include <__config> -#include <__type_traits/add_lvalue_reference.h> -#include <__type_traits/add_rvalue_reference.h> +#include <__type_traits/add_reference.h> #include <__type_traits/integral_constant.h> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) diff --git a/libcxx/include/__type_traits/is_swappable.h b/libcxx/include/__type_traits/is_swappable.h index 2afe784e8d896..5c060402f16d1 100644 --- a/libcxx/include/__type_traits/is_swappable.h +++ b/libcxx/include/__type_traits/is_swappable.h @@ -11,7 +11,7 @@ #include <__config> #include <__cstddef/size_t.h> -#include <__type_traits/add_lvalue_reference.h> +#include <__type_traits/add_reference.h> #include <__type_traits/enable_if.h> #include <__type_traits/integral_constant.h> #include <__type_traits/is_assignable.h> diff --git a/libcxx/include/__type_traits/is_trivially_assignable.h b/libcxx/include/__type_traits/is_trivially_assignable.h index 6548de991be4c..c95ed9dd57be4 100644 --- a/libcxx/include/__type_traits/is_trivially_assignable.h +++ b/libcxx/include/__type_traits/is_trivially_assignable.h @@ -10,8 +10,7 @@ #define _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_ASSIGNABLE_H #include <__config> -#include <__type_traits/add_lvalue_reference.h> -#include <__type_traits/add_rvalue_reference.h> +#include <__type_traits/add_reference.h> #include <__type_traits/integral_constant.h> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) diff --git a/libcxx/include/__type_traits/is_trivially_constructible.h b/libcxx/include/__type_traits/is_trivially_constructible.h index 4e36c910cc042..820b04287c517 100644 --- a/libcxx/include/__type_traits/is_trivially_constructible.h +++ b/libcxx/include/__type_traits/is_trivially_constructible.h @@ -10,8 +10,7 @@ #define _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_CONSTRUCTIBLE_H #include <__config> -#include <__type_traits/add_lvalue_reference.h> -#include <__type_traits/add_rvalue_reference.h> +#include <__type_traits/add_reference.h> #include <__type_traits/integral_constant.h> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) diff --git a/libcxx/include/experimental/memory b/libcxx/include/experimental/memory index 7ebae2847e5ea..ffbd8f3a065a6 100644 --- a/libcxx/include/experimental/memory +++ b/libcxx/include/experimental/memory @@ -57,8 +57,8 @@ public: # include <__cstddef/size_t.h> # include <__functional/hash.h> # include <__functional/operations.h> -# include <__type_traits/add_lvalue_reference.h> # include <__type_traits/add_pointer.h> +# include <__type_traits/add_reference.h> # include <__type_traits/common_type.h> # include <__type_traits/enable_if.h> # include <__type_traits/is_convertible.h> diff --git a/libcxx/include/future b/libcxx/include/future index f49ed34a9c767..31932aeeb6b82 100644 --- a/libcxx/include/future +++ b/libcxx/include/future @@ -393,7 +393,7 @@ template struct uses_allocator, Alloc>; # include <__system_error/error_code.h> # include <__system_error/error_condition.h> # include <__thread/thread.h> -# include <__type_traits/add_lvalue_reference.h> +# include <__type_traits/add_reference.h> # include <__type_traits/aligned_storage.h> # include <__type_traits/conditional.h> # include <__type_traits/decay.h> diff --git a/libcxx/include/module.modulemap.in b/libcxx/include/module.modulemap.in index b00a8ebd54623..97ca782d730c7 100644 --- a/libcxx/include/module.modulemap.in +++ b/libcxx/include/module.modulemap.in @@ -65,9 +65,8 @@ module std_core [system] { module type_traits { module add_cv_quals { header "__type_traits/add_cv_quals.h" } - module add_lvalue_reference { header "__type_traits/add_lvalue_reference.h" } module add_pointer { header "__type_traits/add_pointer.h" } - module add_rvalue_reference { header "__type_traits/add_rvalue_reference.h" } + module add_reference { header "__type_traits/add_reference.h" } module aligned_storage { header "__type_traits/aligned_storage.h" } module aligned_union { header "__type_traits/aligned_union.h" } module alignment_of { header "__type_traits/alignment_of.h" } diff --git a/libcxx/include/type_traits b/libcxx/include/type_traits index 9db7b2afb0cf3..a6e0c1867566b 100644 --- a/libcxx/include/type_traits +++ b/libcxx/include/type_traits @@ -463,9 +463,8 @@ namespace std #else # include <__config> # include <__type_traits/add_cv_quals.h> -# include <__type_traits/add_lvalue_reference.h> # include <__type_traits/add_pointer.h> -# include <__type_traits/add_rvalue_reference.h> +# include <__type_traits/add_reference.h> # include <__type_traits/aligned_storage.h> # include <__type_traits/aligned_union.h> # include <__type_traits/alignment_of.h>