forked from OSchip/llvm-project
[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:
parent
06e2b737aa
commit
e21ab31f45
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue