11e77b396SNikolas Klauser // -*- C++ -*- 21e77b396SNikolas Klauser //===----------------------------------------------------------------------===// 31e77b396SNikolas Klauser // 41e77b396SNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 51e77b396SNikolas Klauser // See https://llvm.org/LICENSE.txt for license information. 61e77b396SNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 71e77b396SNikolas Klauser // 81e77b396SNikolas Klauser //===----------------------------------------------------------------------===// 91e77b396SNikolas Klauser 101e77b396SNikolas Klauser #ifndef _LIBCPP___ALGORITHM_IN_FUN_RESULT_H 111e77b396SNikolas Klauser #define _LIBCPP___ALGORITHM_IN_FUN_RESULT_H 121e77b396SNikolas Klauser 131e77b396SNikolas Klauser #include <__concepts/convertible_to.h> 141e77b396SNikolas Klauser #include <__config> 151e77b396SNikolas Klauser #include <__utility/move.h> 161e77b396SNikolas Klauser 171e77b396SNikolas Klauser #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 181e77b396SNikolas Klauser # pragma GCC system_header 191e77b396SNikolas Klauser #endif 201e77b396SNikolas Klauser 21*7b462251SLouis Dionne _LIBCPP_PUSH_MACROS 22*7b462251SLouis Dionne #include <__undef_macros> 23*7b462251SLouis Dionne 241e77b396SNikolas Klauser _LIBCPP_BEGIN_NAMESPACE_STD 251e77b396SNikolas Klauser 264f15267dSNikolas Klauser #if _LIBCPP_STD_VER >= 20 271e77b396SNikolas Klauser 281e77b396SNikolas Klauser namespace ranges { 29aed0e8b8SNikolas Klauser template <class _InIter1, class _Func1> 301e77b396SNikolas Klauser struct in_fun_result { 31aed0e8b8SNikolas Klauser _LIBCPP_NO_UNIQUE_ADDRESS _InIter1 in; 32aed0e8b8SNikolas Klauser _LIBCPP_NO_UNIQUE_ADDRESS _Func1 fun; 331e77b396SNikolas Klauser 34aed0e8b8SNikolas Klauser template <class _InIter2, class _Func2> 35aed0e8b8SNikolas Klauser requires convertible_to<const _InIter1&, _InIter2> && convertible_to<const _Func1&, _Func2> in_fun_resultin_fun_result36aed0e8b8SNikolas Klauser _LIBCPP_HIDE_FROM_ABI constexpr operator in_fun_result<_InIter2, _Func2>() const& { 371e77b396SNikolas Klauser return {in, fun}; 381e77b396SNikolas Klauser } 391e77b396SNikolas Klauser 40aed0e8b8SNikolas Klauser template <class _InIter2, class _Func2> 41aed0e8b8SNikolas Klauser requires convertible_to<_InIter1, _InIter2> && convertible_to<_Func1, _Func2> in_fun_resultin_fun_result42aed0e8b8SNikolas Klauser _LIBCPP_HIDE_FROM_ABI constexpr operator in_fun_result<_InIter2, _Func2>() && { 431e77b396SNikolas Klauser return {std::move(in), std::move(fun)}; 441e77b396SNikolas Klauser } 451e77b396SNikolas Klauser }; 461e77b396SNikolas Klauser } // namespace ranges 471e77b396SNikolas Klauser 484f15267dSNikolas Klauser #endif // _LIBCPP_STD_VER >= 20 491e77b396SNikolas Klauser 501e77b396SNikolas Klauser _LIBCPP_END_NAMESPACE_STD 511e77b396SNikolas Klauser 52*7b462251SLouis Dionne _LIBCPP_POP_MACROS 53*7b462251SLouis Dionne 541e77b396SNikolas Klauser #endif // _LIBCPP___ALGORITHM_IN_FUN_RESULT_H 55