1d3729bb3SNikolas Klauser // -*- C++ -*- 2d3729bb3SNikolas Klauser //===----------------------------------------------------------------------===// 3d3729bb3SNikolas Klauser // 4d3729bb3SNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5d3729bb3SNikolas Klauser // See https://llvm.org/LICENSE.txt for license information. 6d3729bb3SNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7d3729bb3SNikolas Klauser // 8d3729bb3SNikolas Klauser //===----------------------------------------------------------------------===// 9d3729bb3SNikolas Klauser 10d3729bb3SNikolas Klauser #ifndef _LIBCPP___ALGORITHM_IN_IN_RESULT_H 11d3729bb3SNikolas Klauser #define _LIBCPP___ALGORITHM_IN_IN_RESULT_H 12d3729bb3SNikolas Klauser 13d3729bb3SNikolas Klauser #include <__concepts/convertible_to.h> 14d3729bb3SNikolas Klauser #include <__config> 15d3729bb3SNikolas Klauser #include <__utility/move.h> 16d3729bb3SNikolas Klauser 1793e7f35aSArthur O'Dwyer #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 1893e7f35aSArthur O'Dwyer # pragma GCC system_header 1993e7f35aSArthur O'Dwyer #endif 2093e7f35aSArthur O'Dwyer 21*7b462251SLouis Dionne _LIBCPP_PUSH_MACROS 22*7b462251SLouis Dionne #include <__undef_macros> 23*7b462251SLouis Dionne 24d3729bb3SNikolas Klauser _LIBCPP_BEGIN_NAMESPACE_STD 25d3729bb3SNikolas Klauser 264f15267dSNikolas Klauser #if _LIBCPP_STD_VER >= 20 27d3729bb3SNikolas Klauser 28d3729bb3SNikolas Klauser namespace ranges { 2993e7f35aSArthur O'Dwyer 30aed0e8b8SNikolas Klauser template <class _InIter1, class _InIter2> 31d3729bb3SNikolas Klauser struct in_in_result { 32aed0e8b8SNikolas Klauser _LIBCPP_NO_UNIQUE_ADDRESS _InIter1 in1; 33aed0e8b8SNikolas Klauser _LIBCPP_NO_UNIQUE_ADDRESS _InIter2 in2; 34d3729bb3SNikolas Klauser 35aed0e8b8SNikolas Klauser template <class _InIter3, class _InIter4> 36aed0e8b8SNikolas Klauser requires convertible_to<const _InIter1&, _InIter3> && convertible_to<const _InIter2&, _InIter4> in_in_resultin_in_result379783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI constexpr operator in_in_result<_InIter3, _InIter4>() const& { 38d3729bb3SNikolas Klauser return {in1, in2}; 39d3729bb3SNikolas Klauser } 40d3729bb3SNikolas Klauser 41aed0e8b8SNikolas Klauser template <class _InIter3, class _InIter4> 42aed0e8b8SNikolas Klauser requires convertible_to<_InIter1, _InIter3> && convertible_to<_InIter2, _InIter4> in_in_resultin_in_result439783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI constexpr operator in_in_result<_InIter3, _InIter4>() && { 44e06ca312SNikolas Klauser return {std::move(in1), std::move(in2)}; 45e06ca312SNikolas Klauser } 46d3729bb3SNikolas Klauser }; 4793e7f35aSArthur O'Dwyer 48d3729bb3SNikolas Klauser } // namespace ranges 49d3729bb3SNikolas Klauser 504f15267dSNikolas Klauser #endif // _LIBCPP_STD_VER >= 20 51d3729bb3SNikolas Klauser 52d3729bb3SNikolas Klauser _LIBCPP_END_NAMESPACE_STD 53d3729bb3SNikolas Klauser 54*7b462251SLouis Dionne _LIBCPP_POP_MACROS 55*7b462251SLouis Dionne 56d3729bb3SNikolas Klauser #endif // _LIBCPP___ALGORITHM_IN_IN_RESULT_H 57