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 21681cde7dSNikolas Klauser #if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION) 22681cde7dSNikolas Klauser 23050b064fSChristopher Di Bella template <class _Arg1, class _Arg2, class _Result> 249783f28cSLouis Dionne struct _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX11 binary_function { 25050b064fSChristopher Di Bella typedef _Arg1 first_argument_type; 26050b064fSChristopher Di Bella typedef _Arg2 second_argument_type; 27050b064fSChristopher Di Bella typedef _Result result_type; 28050b064fSChristopher Di Bella }; 29050b064fSChristopher Di Bella 30681cde7dSNikolas Klauser #endif // _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION) 31681cde7dSNikolas Klauser 329783f28cSLouis Dionne template <class _Arg1, class _Arg2, class _Result> 339783f28cSLouis Dionne struct __binary_function_keep_layout_base { 34681cde7dSNikolas Klauser #if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS) 35681cde7dSNikolas Klauser using first_argument_type _LIBCPP_DEPRECATED_IN_CXX17 = _Arg1; 36681cde7dSNikolas Klauser using second_argument_type _LIBCPP_DEPRECATED_IN_CXX17 = _Arg2; 37681cde7dSNikolas Klauser using result_type _LIBCPP_DEPRECATED_IN_CXX17 = _Result; 38681cde7dSNikolas Klauser #endif 39681cde7dSNikolas Klauser }; 40681cde7dSNikolas Klauser 41681cde7dSNikolas Klauser #if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION) 42681cde7dSNikolas Klauser _LIBCPP_DIAGNOSTIC_PUSH 43681cde7dSNikolas Klauser _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") 44681cde7dSNikolas Klauser template <class _Arg1, class _Arg2, class _Result> 45*f6958523SNikolas Klauser using __binary_function _LIBCPP_NODEBUG = binary_function<_Arg1, _Arg2, _Result>; 46681cde7dSNikolas Klauser _LIBCPP_DIAGNOSTIC_POP 47681cde7dSNikolas Klauser #else 48681cde7dSNikolas Klauser template <class _Arg1, class _Arg2, class _Result> 49*f6958523SNikolas Klauser using __binary_function _LIBCPP_NODEBUG = __binary_function_keep_layout_base<_Arg1, _Arg2, _Result>; 50681cde7dSNikolas Klauser #endif 51681cde7dSNikolas Klauser 52050b064fSChristopher Di Bella _LIBCPP_END_NAMESPACE_STD 53050b064fSChristopher Di Bella 54050b064fSChristopher Di Bella #endif // _LIBCPP___FUNCTIONAL_BINARY_FUNCTION_H 55