compressed_pair is widely used in the library, but most of the uses don't use the tuple parts. To avoid including <tuple> everywhere, use the forward declaration instead in compressed_pair.h
Reviewed By: ldionne, #libc
Spies: libcxx-commits
Differential Revision: https://reviews.llvm.org/D133331
#define _LIBCPP___MEMORY_COMPRESSED_PAIR_H
#include <__config>
+#include <__fwd/get.h>
+#include <__fwd/tuple.h>
+#include <__tuple/tuple_indices.h>
#include <__type_traits/dependent_type.h>
#include <__utility/forward.h>
#include <__utility/move.h>
-#include <tuple> // needed in c++03 for some constructors
+#include <__utility/piecewise_construct.h>
#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#include <__algorithm/find_end.h>
#include <__algorithm/find_first_of.h>
#include <__algorithm/min.h>
+#include <__compare/ordering.h>
#include <__config>
#include <__functional/hash.h>
#include <__iterator/iterator_traits.h>
-#include <compare>
+#include <__type_traits/is_constant_evaluated.h>
+#include <cstddef>
#include <cstdint>
#include <cstdio>
-#include <cstring>
#include <iosfwd>
-#include <type_traits>
#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
# include <cwchar> // for wmemcpy
#include <concepts>
#include <exception>
#include <memory> // TODO: find out why removing this breaks the modules build
-#include <tuple>
#include <type_traits>
#include <typeinfo>
#include <version>
#endif
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+# include <tuple>
# include <utility>
#endif
bit
climits
-cmath
-compare
concepts
cstddef
cstdint
iosfwd
limits
new
-tuple
type_traits
version
atomic
climits
-cmath
-compare
concepts
cstddef
cstdint
new
ratio
stdexcept
-tuple
type_traits
typeinfo
version
atomic
climits
-cmath
-compare
cstddef
cstdint
cstdlib
limits
new
ratio
-tuple
type_traits
version
stdexcept
string
string_view
-tuple
type_traits
version
string
string_view
system_error
-tuple
type_traits
typeinfo
version
new
ratio
stdexcept
-tuple
type_traits
typeinfo
version
algorithm
bit
climits
-cmath
-compare
concepts
cstddef
cstdint
iosfwd
limits
new
-tuple
type_traits
version
new
ratio
stdexcept
-tuple
type_traits
typeinfo
version
new
ratio
stdexcept
-tuple
type_traits
typeinfo
version
new
ratio
stdexcept
-tuple
type_traits
typeinfo
version
new
ratio
stdexcept
-tuple
type_traits
typeinfo
vector
stdexcept
string
string_view
-tuple
type_traits
typeinfo
vector
new
optional
stdexcept
-tuple
type_traits
version
string
string_view
system_error
-tuple
type_traits
version
new
ratio
stdexcept
-tuple
type_traits
typeinfo
version
new
stdexcept
string_view
-tuple
type_traits
version
stdexcept
string
string_view
-tuple
type_traits
version
new
optional
stdexcept
-tuple
type_traits
version
new
ratio
stdexcept
-tuple
type_traits
typeinfo
version
// minmax(const T& a, const T& b, Compare comp);
#include <algorithm>
-#include <functional>
#include <cassert>
+#include <functional>
+#include <utility>
#include "test_macros.h"
#include <cassert>
#include <cstddef>
#include <memory>
+#include <utility>
#include "test_macros.h"
// only SFINAE away when too few arguments are provided. Otherwise they should
// be well formed and should ignore any additional arguments.
+#include <cassert>
#include <functional>
#include <type_traits>
-#include <cassert>
+#include <utility>
#include "test_macros.h"
// be treated as a subexpression in a bind call.
// https://llvm.org/PR51753
-#include <functional>
#include <cassert>
+#include <functional>
#include <type_traits>
+#include <utility>
struct MyBind {
int operator()(int x, int y) const { return 10*x + y; }
// to indicate that T should be treated as a placeholder type.
// https://llvm.org/PR51753
-#include <functional>
#include <cassert>
+#include <functional>
#include <type_traits>
+#include <utility>
struct My2 {};
template<> struct std::is_placeholder<My2> : std::integral_constant<int, 2> {};
#include <cassert>
#include <concepts>
+#include <utility>
#include "MoveOnly.h"
//
// This signature was removed in C++17
+#include <cassert>
#include <functional>
#include <memory>
-#include <cassert>
+#include <utility>
#include "test_macros.h"
// This test runs in C++03, but we have deprecated using std::function in C++03.
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS -D_LIBCPP_ENABLE_CXX03_FUNCTION
-#include <functional>
#include <cassert>
+#include <functional>
+#include <utility>
#include "test_macros.h"
#include "count_new.h"
#include <memory>
#include <cstdlib>
#include <cassert>
+#include <utility>
#include "test_macros.h"
#include "count_new.h"
// ranges::equal_to
+#include <cassert>
#include <functional>
#include <type_traits>
-#include <cassert>
+#include <utility>
#include "test_macros.h"
#include "compare_types.h"
// ranges::greater
+#include <cassert>
#include <functional>
#include <type_traits>
-#include <cassert>
+#include <utility>
#include "test_macros.h"
#include "compare_types.h"
// ranges::greater_equal
+#include <cassert>
#include <functional>
#include <type_traits>
-#include <cassert>
+#include <utility>
#include "test_macros.h"
#include "compare_types.h"
// ranges::less
+#include <cassert>
#include <functional>
#include <type_traits>
-#include <cassert>
+#include <utility>
#include "test_macros.h"
#include "compare_types.h"
// ranges::less_equal
+#include <cassert>
#include <functional>
#include <type_traits>
-#include <cassert>
+#include <utility>
#include "test_macros.h"
#include "compare_types.h"
// ranges::not_equal_to
+#include <cassert>
#include <functional>
#include <type_traits>
-#include <cassert>
+#include <utility>
#include "test_macros.h"
#include "compare_types.h"
// raw_storage_iterator
+#include <cassert>
#include <memory>
#include <type_traits>
-#include <cassert>
+#include <utility>
#include "test_macros.h"
#include <MoveOnly.h>
*
*/
-#include <functional>
#include <cassert>
+#include <functional>
#include <new>
+#include <utility>
#include "test_macros.h"