58 lines · c
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef _LIBCPP___ALGORITHM_COMP_H10#define _LIBCPP___ALGORITHM_COMP_H11 12#include <__config>13#include <__type_traits/desugars_to.h>14#include <__type_traits/is_generic_transparent_comparator.h>15#include <__type_traits/is_integral.h>16 17#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)18# pragma GCC system_header19#endif20 21_LIBCPP_BEGIN_NAMESPACE_STD22 23struct __equal_to {24 template <class _T1, class _T2>25 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool operator()(const _T1& __x, const _T2& __y) const {26 return __x == __y;27 }28};29 30template <class _Tp, class _Up>31inline const bool __desugars_to_v<__equal_tag, __equal_to, _Tp, _Up> = true;32 33// The definition is required because __less is part of the ABI, but it's empty34// because all comparisons should be transparent.35template <class _T1 = void, class _T2 = _T1>36struct __less {};37 38template <>39struct __less<void, void> {40 template <class _Tp, class _Up>41 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool operator()(const _Tp& __lhs, const _Up& __rhs) const {42 return __lhs < __rhs;43 }44};45 46template <class _Tp>47inline const bool __desugars_to_v<__less_tag, __less<>, _Tp, _Tp> = true;48 49template <class _Tp>50inline const bool __desugars_to_v<__totally_ordered_less_tag, __less<>, _Tp, _Tp> = is_integral<_Tp>::value;51 52template <>53inline const bool __is_generic_transparent_comparator_v<__less<> > = true;54 55_LIBCPP_END_NAMESPACE_STD56 57#endif // _LIBCPP___ALGORITHM_COMP_H58