1807766beSNikolas Klauser // -*- C++ -*- 2807766beSNikolas Klauser //===----------------------------------------------------------------------===// 3807766beSNikolas Klauser // 4807766beSNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5807766beSNikolas Klauser // See https://llvm.org/LICENSE.txt for license information. 6807766beSNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7807766beSNikolas Klauser // 8807766beSNikolas Klauser //===----------------------------------------------------------------------===// 9807766beSNikolas Klauser 10807766beSNikolas Klauser #ifndef _LIBCPP___ALGORITHM_MIN_MAX_RESULT_H 11807766beSNikolas Klauser #define _LIBCPP___ALGORITHM_MIN_MAX_RESULT_H 12807766beSNikolas Klauser 13807766beSNikolas Klauser #include <__concepts/convertible_to.h> 14807766beSNikolas Klauser #include <__config> 15807766beSNikolas Klauser #include <__utility/move.h> 16807766beSNikolas Klauser 17807766beSNikolas Klauser #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 18807766beSNikolas Klauser # pragma GCC system_header 19807766beSNikolas Klauser #endif 20807766beSNikolas Klauser 21807766beSNikolas Klauser _LIBCPP_PUSH_MACROS 22807766beSNikolas Klauser #include <__undef_macros> 23807766beSNikolas Klauser 24807766beSNikolas Klauser _LIBCPP_BEGIN_NAMESPACE_STD 25807766beSNikolas Klauser 26*4f15267dSNikolas Klauser #if _LIBCPP_STD_VER >= 20 27807766beSNikolas Klauser 28807766beSNikolas Klauser namespace ranges { 29807766beSNikolas Klauser 30807766beSNikolas Klauser template <class _T1> 31807766beSNikolas Klauser struct min_max_result { 32c7b43b01SNikolas Klauser _LIBCPP_NO_UNIQUE_ADDRESS _T1 min; 33c7b43b01SNikolas Klauser _LIBCPP_NO_UNIQUE_ADDRESS _T1 max; 34807766beSNikolas Klauser 35807766beSNikolas Klauser template <class _T2> 36807766beSNikolas Klauser requires convertible_to<const _T1&, _T2> min_max_resultmin_max_result37807766beSNikolas Klauser _LIBCPP_HIDE_FROM_ABI constexpr operator min_max_result<_T2>() const& { 38807766beSNikolas Klauser return {min, max}; 39807766beSNikolas Klauser } 40807766beSNikolas Klauser 41807766beSNikolas Klauser template <class _T2> 42807766beSNikolas Klauser requires convertible_to<_T1, _T2> min_max_resultmin_max_result43807766beSNikolas Klauser _LIBCPP_HIDE_FROM_ABI constexpr operator min_max_result<_T2>() && { 44807766beSNikolas Klauser return {std::move(min), std::move(max)}; 45807766beSNikolas Klauser } 46807766beSNikolas Klauser }; 47807766beSNikolas Klauser 48807766beSNikolas Klauser } // namespace ranges 49807766beSNikolas Klauser 50*4f15267dSNikolas Klauser #endif // _LIBCPP_STD_VER >= 20 51807766beSNikolas Klauser 52807766beSNikolas Klauser _LIBCPP_END_NAMESPACE_STD 53807766beSNikolas Klauser 54807766beSNikolas Klauser _LIBCPP_POP_MACROS 55807766beSNikolas Klauser 56e06ca312SNikolas Klauser #endif // _LIBCPP___ALGORITHM_MIN_MAX_RESULT_H 57