[libc++] Eliminate <compare>'s dependency on <array>.

This refactor is not only a good idea, but is in fact required by the standard,
in the sense that <array> is mandated to include <compare>.
So <compare> shouldn't have a circular dependency on <array>!

Differential Revision: https://reviews.llvm.org/D99307
This commit is contained in:
Arthur O'Dwyer 2021-03-24 19:14:51 -04:00
parent 06e2b737aa
commit e21ab31f45
1 changed files with 4 additions and 6 deletions

View File

@ -126,7 +126,6 @@ namespace std {
#include <__config> #include <__config>
#include <type_traits> #include <type_traits>
#include <array>
#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER #ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
#pragma GCC system_header #pragma GCC system_header
@ -701,8 +700,8 @@ constexpr _ClassifyCompCategory __type_to_enum() noexcept {
template <size_t _Size> template <size_t _Size>
constexpr _ClassifyCompCategory constexpr _ClassifyCompCategory
__compute_comp_type(array<_ClassifyCompCategory, _Size> __types) { __compute_comp_type(const _ClassifyCompCategory (&__types)[_Size]) {
array<int, _CCC_Size> __seen = {}; int __seen[_CCC_Size] = {};
for (auto __type : __types) for (auto __type : __types)
++__seen[__type]; ++__seen[__type];
if (__seen[_None]) if (__seen[_None])
@ -723,9 +722,8 @@ __compute_comp_type(array<_ClassifyCompCategory, _Size> __types) {
template <class ..._Ts> template <class ..._Ts>
constexpr auto __get_comp_type() { constexpr auto __get_comp_type() {
using _CCC = _ClassifyCompCategory; using _CCC = _ClassifyCompCategory;
constexpr array<_CCC, sizeof...(_Ts)> __type_kinds{{__comp_detail::__type_to_enum<_Ts>()...}}; constexpr _CCC __type_kinds[] = {_StrongOrd, __type_to_enum<_Ts>()...};
constexpr _CCC _Cat = sizeof...(_Ts) == 0 ? _StrongOrd constexpr _CCC _Cat = __compute_comp_type(__type_kinds);
: __compute_comp_type(__type_kinds);
if constexpr (_Cat == _None) if constexpr (_Cat == _None)
return void(); return void();
else if constexpr (_Cat == _WeakEq) else if constexpr (_Cat == _WeakEq)