codekingpro/portable-devtools
114k
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// SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES.7//8//===----------------------------------------------------------------------===//9 10#ifndef _LIBCUDACXX___CONCEPTS_RELATION_H11#define _LIBCUDACXX___CONCEPTS_RELATION_H12 13#ifndef __cuda_std__14#include <__config>15#endif //__cuda_std__16 17#include "../__concepts/__concept_macros.h"18#include "../__concepts/predicate.h"19 20#if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC)21# pragma GCC system_header22#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG)23# pragma clang system_header24#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC)25# pragma system_header26#endif // no system header27 28_LIBCUDACXX_BEGIN_NAMESPACE_STD29 30#if _LIBCUDACXX_STD_VER > 1731 32// [concept.relation]33 34template<class _Rp, class _Tp, class _Up>35concept relation =36 predicate<_Rp, _Tp, _Tp> && predicate<_Rp, _Up, _Up> &&37 predicate<_Rp, _Tp, _Up> && predicate<_Rp, _Up, _Tp>;38 39// [concept.equiv]40 41template<class _Rp, class _Tp, class _Up>42concept equivalence_relation = relation<_Rp, _Tp, _Up>;43 44// [concept.strictweakorder]45 46template<class _Rp, class _Tp, class _Up>47concept strict_weak_order = relation<_Rp, _Tp, _Up>;48 49#elif _LIBCUDACXX_STD_VER > 1150 51template<class _Rp, class _Tp, class _Up>52_LIBCUDACXX_CONCEPT_FRAGMENT(53 __relation_,54 requires()(55 requires(predicate<_Rp, _Tp, _Tp>),56 requires(predicate<_Rp, _Up, _Up>),57 requires(predicate<_Rp, _Tp, _Up>),58 requires(predicate<_Rp, _Up, _Tp>)59 ));60 61template<class _Rp, class _Tp, class _Up>62_LIBCUDACXX_CONCEPT relation = _LIBCUDACXX_FRAGMENT(__relation_, _Rp, _Tp, _Up);63 64// [concept.equiv]65 66template<class _Rp, class _Tp, class _Up>67_LIBCUDACXX_CONCEPT equivalence_relation = relation<_Rp, _Tp, _Up>;68 69// [concept.strictweakorder]70 71template<class _Rp, class _Tp, class _Up>72_LIBCUDACXX_CONCEPT strict_weak_order = relation<_Rp, _Tp, _Up>;73 74#endif // _LIBCUDACXX_STD_VER > 1175 76_LIBCUDACXX_END_NAMESPACE_STD77 78#endif // _LIBCUDACXX___CONCEPTS_RELATION_H79 