#pragma once
#include <cstdint>
#include <stdexcept>
#include <folly/lang/Exception.h>
namespace folly {
enum class ordering : std::int8_t { … };
template <typename T>
constexpr ordering to_ordering(T c) { … }
namespace detail {
template <typename C, ordering o, bool ne>
struct cmp_pred : private C { … };
}
template <typename C>
struct compare_equal_to : detail::cmp_pred<C, ordering::eq, 0> { … };
template <typename C>
struct compare_not_equal_to : detail::cmp_pred<C, ordering::eq, 1> { … };
template <typename C>
struct compare_less : detail::cmp_pred<C, ordering::lt, 0> { … };
template <typename C>
struct compare_less_equal : detail::cmp_pred<C, ordering::gt, 1> { … };
template <typename C>
struct compare_greater : detail::cmp_pred<C, ordering::gt, 0> { … };
template <typename C>
struct compare_greater_equal : detail::cmp_pred<C, ordering::lt, 1> { … };
namespace detail {
template <typename D>
struct partial_ordering_ { … };
template <typename D>
FOLLY_STORAGE_CONSTEXPR D const partial_ordering_<D>::less{ … };
template <typename D>
FOLLY_STORAGE_CONSTEXPR D const partial_ordering_<D>::greater{ … };
template <typename D>
FOLLY_STORAGE_CONSTEXPR D const partial_ordering_<D>::equivalent{ … };
template <typename D>
FOLLY_STORAGE_CONSTEXPR D const
partial_ordering_<D>::unordered{ … };
}
class partial_ordering : private detail::partial_ordering_<partial_ordering> { … };
}