1050b064fSChristopher Di Bella // -*- C++ -*- 2050b064fSChristopher Di Bella //===----------------------------------------------------------------------===// 3050b064fSChristopher Di Bella // 4050b064fSChristopher Di Bella // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5050b064fSChristopher Di Bella // See https://llvm.org/LICENSE.txt for license information. 6050b064fSChristopher Di Bella // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7050b064fSChristopher Di Bella // 8050b064fSChristopher Di Bella //===----------------------------------------------------------------------===// 9050b064fSChristopher Di Bella 10050b064fSChristopher Di Bella #ifndef _LIBCPP___FUNCTIONAL_BINARY_FUNCTION_H 11050b064fSChristopher Di Bella #define _LIBCPP___FUNCTIONAL_BINARY_FUNCTION_H 12050b064fSChristopher Di Bella 13050b064fSChristopher Di Bella #include <__config> 14050b064fSChristopher Di Bella 15050b064fSChristopher Di Bella #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 16050b064fSChristopher Di Bella # pragma GCC system_header 17050b064fSChristopher Di Bella #endif 18050b064fSChristopher Di Bella 19050b064fSChristopher Di Bella _LIBCPP_BEGIN_NAMESPACE_STD 20050b064fSChristopher Di Bella 21*681cde7dSNikolas Klauser #if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION) 22*681cde7dSNikolas Klauser 23050b064fSChristopher Di Bella template <class _Arg1, class _Arg2, class _Result> 24*681cde7dSNikolas Klauser struct _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 binary_function 25050b064fSChristopher Di Bella { 26050b064fSChristopher Di Bella typedef _Arg1 first_argument_type; 27050b064fSChristopher Di Bella typedef _Arg2 second_argument_type; 28050b064fSChristopher Di Bella typedef _Result result_type; 29050b064fSChristopher Di Bella }; 30050b064fSChristopher Di Bella 31*681cde7dSNikolas Klauser #endif // _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION) 32*681cde7dSNikolas Klauser 33*681cde7dSNikolas Klauser template <class _Arg1, class _Arg2, class _Result> struct __binary_function_keep_layout_base { 34*681cde7dSNikolas Klauser #if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) 35*681cde7dSNikolas Klauser using first_argument_type _LIBCPP_DEPRECATED_IN_CXX17 = _Arg1; 36*681cde7dSNikolas Klauser using second_argument_type _LIBCPP_DEPRECATED_IN_CXX17 = _Arg2; 37*681cde7dSNikolas Klauser using result_type _LIBCPP_DEPRECATED_IN_CXX17 = _Result; 38*681cde7dSNikolas Klauser #endif 39*681cde7dSNikolas Klauser }; 40*681cde7dSNikolas Klauser 41*681cde7dSNikolas Klauser #if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION) 42*681cde7dSNikolas Klauser _LIBCPP_DIAGNOSTIC_PUSH 43*681cde7dSNikolas Klauser _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") 44*681cde7dSNikolas Klauser template <class _Arg1, class _Arg2, class _Result> 45*681cde7dSNikolas Klauser using __binary_function = binary_function<_Arg1, _Arg2, _Result>; 46*681cde7dSNikolas Klauser _LIBCPP_DIAGNOSTIC_POP 47*681cde7dSNikolas Klauser #else 48*681cde7dSNikolas Klauser template <class _Arg1, class _Arg2, class _Result> 49*681cde7dSNikolas Klauser using __binary_function = __binary_function_keep_layout_base<_Arg1, _Arg2, _Result>; 50*681cde7dSNikolas Klauser #endif 51*681cde7dSNikolas Klauser 52050b064fSChristopher Di Bella _LIBCPP_END_NAMESPACE_STD 53050b064fSChristopher Di Bella 54050b064fSChristopher Di Bella #endif // _LIBCPP___FUNCTIONAL_BINARY_FUNCTION_H 55