//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. // //===----------------------------------------------------------------------===// #ifndef _LIBCUDACXX___CONCEPTS_TOTALLY_ORDERED_H #define _LIBCUDACXX___CONCEPTS_TOTALLY_ORDERED_H #include #if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC) # pragma GCC system_header #elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG) # pragma clang system_header #elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC) # pragma system_header #endif // no system header #include #include #include #include #include _LIBCUDACXX_BEGIN_NAMESPACE_STD #if _CCCL_STD_VER > 2017 // [concept.totallyordered] template concept __partially_ordered_with = requires(__make_const_lvalue_ref<_Tp> __t, __make_const_lvalue_ref<_Up> __u) { { __t < __u } -> __boolean_testable; { __t > __u } -> __boolean_testable; { __t <= __u } -> __boolean_testable; { __t >= __u } -> __boolean_testable; { __u < __t } -> __boolean_testable; { __u > __t } -> __boolean_testable; { __u <= __t } -> __boolean_testable; { __u >= __t } -> __boolean_testable; }; template concept totally_ordered = equality_comparable<_Tp> && __partially_ordered_with<_Tp, _Tp>; template concept totally_ordered_with = totally_ordered<_Tp> && totally_ordered<_Up> && equality_comparable_with<_Tp, _Up> && totally_ordered, __make_const_lvalue_ref<_Up>>> && __partially_ordered_with<_Tp, _Up>; #elif _CCCL_STD_VER > 2011 template _LIBCUDACXX_CONCEPT_FRAGMENT( __partially_ordered_with_, requires(__make_const_lvalue_ref<_Tp> __t, __make_const_lvalue_ref<_Up> __u)( requires(__boolean_testable), requires(__boolean_testable __u)>), requires(__boolean_testable), requires(__boolean_testable= __u)>), requires(__boolean_testable), requires(__boolean_testable __t)>), requires(__boolean_testable), requires(__boolean_testable= __t)>))); template _LIBCUDACXX_CONCEPT __partially_ordered_with = _LIBCUDACXX_FRAGMENT(__partially_ordered_with_, _Tp, _Up); template _LIBCUDACXX_CONCEPT_FRAGMENT( __totally_ordered_, requires()(requires(equality_comparable<_Tp>), requires(__partially_ordered_with<_Tp, _Tp>))); template _LIBCUDACXX_CONCEPT totally_ordered = _LIBCUDACXX_FRAGMENT(__totally_ordered_, _Tp); template _LIBCUDACXX_CONCEPT_FRAGMENT( __totally_ordered_with_, requires()(requires(totally_ordered<_Tp>), requires(totally_ordered<_Up>), requires(equality_comparable_with<_Tp, _Up>), requires(totally_ordered, __make_const_lvalue_ref<_Up>>>), requires(__partially_ordered_with<_Tp, _Up>))); template _LIBCUDACXX_CONCEPT totally_ordered_with = _LIBCUDACXX_FRAGMENT(__totally_ordered_with_, _Tp, _Up); ; #endif // _CCCL_STD_VER > 2011 _LIBCUDACXX_END_NAMESPACE_STD #endif // _LIBCUDACXX___CONCEPTS_TOTALLY_ORDERED_H