Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
invocable.h81 linesDownload Raw Back to __concepts
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_INVOCABLE_H11#define _LIBCUDACXX___CONCEPTS_INVOCABLE_H12 13#ifndef __cuda_std__14#include <__config>15#endif //__cuda_std__16 17#include "../__concepts/__concept_macros.h"18#include "../__functional/invoke.h"19#include "../__utility/forward.h"20 21#if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC)22#  pragma GCC system_header23#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG)24#  pragma clang system_header25#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC)26#  pragma system_header27#endif // no system header28 29_LIBCUDACXX_BEGIN_NAMESPACE_STD30 31#if _LIBCUDACXX_STD_VER > 1732 33// [concept.invocable]34 35template<class _Fn, class... _Args>36concept invocable = requires(_Fn&& __fn, _Args&&... __args) {37  _CUDA_VSTD::__invoke(_CUDA_VSTD::forward<_Fn>(__fn), _CUDA_VSTD::forward<_Args>(__args)...); // not required to be equality preserving38};39 40// [concept.regular.invocable]41 42template<class _Fn, class... _Args>43concept regular_invocable = invocable<_Fn, _Args...>;44 45template <class _Fun, class... _Args>46concept __invoke_constructible = requires(_Fun&& __fun, _Args&&... __args) {47    static_cast<remove_cvref_t<invoke_result_t<_Fun, _Args...>>>(48        _CUDA_VSTD::invoke(_CUDA_VSTD::forward<_Fun>(__fun), _CUDA_VSTD::forward<_Args>(__args)...));49};50 51#elif _LIBCUDACXX_STD_VER > 1152 53template<class _Fn, class... _Args>54_LIBCUDACXX_CONCEPT_FRAGMENT(55  _Invocable_,56  requires(_Fn&& __fn, _Args&&... __args)(57    (_CUDA_VSTD::invoke(_CUDA_VSTD::forward<_Fn>(__fn), _CUDA_VSTD::forward<_Args>(__args)...))58  ));59 60template<class _Fn, class... _Args>61_LIBCUDACXX_CONCEPT invocable = _LIBCUDACXX_FRAGMENT(_Invocable_, _Fn, _Args...);62 63template<class _Fn, class... _Args>64_LIBCUDACXX_CONCEPT regular_invocable = invocable<_Fn, _Args...>;65 66template <class _Fun, class... _Args>67_LIBCUDACXX_CONCEPT_FRAGMENT(68  __invoke_constructible_,69  requires(_Fun&& __fun, _Args&&... __args)(70    (static_cast<__remove_cvref_t<invoke_result_t<_Fun, _Args...>>>(71        _CUDA_VSTD::invoke(_CUDA_VSTD::forward<_Fun>(__fun), _CUDA_VSTD::forward<_Args>(__args)...)))72  ));73template <class _Fun, class... _Args>74_LIBCUDACXX_CONCEPT __invoke_constructible = _LIBCUDACXX_FRAGMENT(__invoke_constructible_, _Fun, _Args...);75 76#endif // _LIBCUDACXX_STD_VER > 1177 78_LIBCUDACXX_END_NAMESPACE_STD79 80#endif // _LIBCUDACXX___CONCEPTS_INVOCABLE_H81 
codekingpro/portable-devtools · Team Ai