56#ifndef _STL_FUNCTION_H
57#define _STL_FUNCTION_H 1
59#if __cplusplus > 201103L
63namespace std _GLIBCXX_VISIBILITY(default)
65_GLIBCXX_BEGIN_NAMESPACE_VERSION
104 template<
typename _Arg,
typename _Result>
117 template<
typename _Arg1,
typename _Arg2,
typename _Result>
143#if __cplusplus > 201103L
146 template<
typename _Tp =
void>
149 template<
typename _Tp =
void>
152 template<
typename _Tp =
void>
155 template<
typename _Tp =
void>
158 template<
typename _Tp =
void>
161 template<
typename _Tp =
void>
166 template<
typename _Tp>
171 operator()(
const _Tp& __x,
const _Tp&
__y)
const
172 {
return __x +
__y; }
176 template<
typename _Tp>
181 operator()(
const _Tp& __x,
const _Tp&
__y)
const
182 {
return __x -
__y; }
186 template<
typename _Tp>
191 operator()(
const _Tp& __x,
const _Tp&
__y)
const
192 {
return __x *
__y; }
196 template<
typename _Tp>
201 operator()(
const _Tp& __x,
const _Tp&
__y)
const
202 {
return __x /
__y; }
206 template<
typename _Tp>
211 operator()(
const _Tp& __x,
const _Tp&
__y)
const
212 {
return __x %
__y; }
216 template<
typename _Tp>
221 operator()(
const _Tp& __x)
const
225#if __cplusplus > 201103L
227#define __cpp_lib_transparent_operators 201510
232 template <
typename _Tp,
typename _Up>
235 operator()(_Tp&& __t,
_Up&&
__u)
const
240 typedef __is_transparent is_transparent;
247 template <
typename _Tp,
typename _Up>
250 operator()(_Tp&& __t,
_Up&&
__u)
const
262 template <
typename _Tp,
typename _Up>
265 operator()(_Tp&& __t,
_Up&&
__u)
const
277 template <
typename _Tp,
typename _Up>
280 operator()(_Tp&& __t,
_Up&&
__u)
const
292 template <
typename _Tp,
typename _Up>
295 operator()(_Tp&& __t,
_Up&&
__u)
const
307 template <
typename _Tp>
310 operator()(_Tp&& __t)
const
329#if __cplusplus > 201103L
330 template<
typename _Tp =
void>
333 template<
typename _Tp =
void>
336 template<
typename _Tp =
void>
339 template<
typename _Tp =
void>
342 template<
typename _Tp =
void>
345 template<
typename _Tp =
void>
350 template<
typename _Tp>
355 operator()(
const _Tp& __x,
const _Tp&
__y)
const
356 {
return __x ==
__y; }
360 template<
typename _Tp>
365 operator()(
const _Tp& __x,
const _Tp&
__y)
const
366 {
return __x !=
__y; }
370 template<
typename _Tp>
375 operator()(
const _Tp& __x,
const _Tp&
__y)
const
376 {
return __x >
__y; }
380 template<
typename _Tp>
385 operator()(
const _Tp& __x,
const _Tp&
__y)
const
386 {
return __x <
__y; }
390 template<
typename _Tp>
395 operator()(
const _Tp& __x,
const _Tp&
__y)
const
396 {
return __x >=
__y; }
400 template<
typename _Tp>
405 operator()(
const _Tp& __x,
const _Tp&
__y)
const
406 {
return __x <=
__y; }
410 template<
typename _Tp>
416#if __cplusplus >= 201402L
417#ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED
429 template<
typename _Tp>
430 struct less<_Tp*> :
public binary_function<_Tp*, _Tp*, bool>
432 _GLIBCXX14_CONSTEXPR
bool
433 operator()(_Tp* __x, _Tp* __y)
const _GLIBCXX_NOTHROW
435#if __cplusplus >= 201402L
436#ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED
437 if (__builtin_is_constant_evaluated())
439 if (__builtin_constant_p(__x < __y))
443 return (__UINTPTR_TYPE__)__x < (__UINTPTR_TYPE__)__y;
448 template<
typename _Tp>
449 struct greater_equal<_Tp*> :
public binary_function<_Tp*, _Tp*, bool>
451 _GLIBCXX14_CONSTEXPR
bool
452 operator()(_Tp* __x, _Tp* __y)
const _GLIBCXX_NOTHROW
454#if __cplusplus >= 201402L
455#ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED
456 if (__builtin_is_constant_evaluated())
458 if (__builtin_constant_p(__x >= __y))
462 return (__UINTPTR_TYPE__)__x >= (__UINTPTR_TYPE__)__y;
467 template<
typename _Tp>
468 struct less_equal<_Tp*> :
public binary_function<_Tp*, _Tp*, bool>
470 _GLIBCXX14_CONSTEXPR
bool
471 operator()(_Tp* __x, _Tp* __y)
const _GLIBCXX_NOTHROW
473#if __cplusplus >= 201402L
474#ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED
475 if (__builtin_is_constant_evaluated())
477 if (__builtin_constant_p(__x <= __y))
481 return (__UINTPTR_TYPE__)__x <= (__UINTPTR_TYPE__)__y;
485#if __cplusplus >= 201402L
490 template <
typename _Tp,
typename _Up>
492 operator()(_Tp&& __t,
_Up&&
__u)
const
504 template <
typename _Tp,
typename _Up>
506 operator()(_Tp&& __t,
_Up&&
__u)
const
518 template <
typename _Tp,
typename _Up>
520 operator()(_Tp&& __t,
_Up&&
__u)
const
528 template<
typename _Tp,
typename _Up>
530 operator()(_Tp* __t,
_Up*
__u)
const noexcept
536 template <
typename _Tp,
typename _Up>
537 static constexpr decltype(
auto)
541 template <
typename _Tp,
typename _Up>
542 static constexpr bool
551 template<
typename _Tp,
typename _Up,
typename =
void>
555 template<
typename _Tp,
typename _Up>
561 template<
typename _Tp,
typename _Up,
typename =
void>
565 template<
typename _Tp,
typename _Up>
570 template<
typename _Tp,
typename _Up>
580 template <
typename _Tp,
typename _Up>
582 operator()(_Tp&& __t,
_Up&&
__u)
const
590 template<
typename _Tp,
typename _Up>
592 operator()(_Tp* __t,
_Up*
__u)
const noexcept
598 template <
typename _Tp,
typename _Up>
599 static constexpr decltype(
auto)
603 template <
typename _Tp,
typename _Up>
604 static constexpr bool
613 template<
typename _Tp,
typename _Up,
typename =
void>
617 template<
typename _Tp,
typename _Up>
623 template<
typename _Tp,
typename _Up,
typename =
void>
627 template<
typename _Tp,
typename _Up>
632 template<
typename _Tp,
typename _Up>
642 template <
typename _Tp,
typename _Up>
644 operator()(_Tp&& __t,
_Up&&
__u)
const
652 template<
typename _Tp,
typename _Up>
654 operator()(_Tp* __t,
_Up*
__u)
const noexcept
660 template <
typename _Tp,
typename _Up>
661 static constexpr decltype(
auto)
665 template <
typename _Tp,
typename _Up>
666 static constexpr bool
675 template<
typename _Tp,
typename _Up,
typename =
void>
679 template<
typename _Tp,
typename _Up>
685 template<
typename _Tp,
typename _Up,
typename =
void>
689 template<
typename _Tp,
typename _Up>
694 template<
typename _Tp,
typename _Up>
704 template <
typename _Tp,
typename _Up>
706 operator()(_Tp&& __t,
_Up&&
__u)
const
714 template<
typename _Tp,
typename _Up>
716 operator()(_Tp* __t,
_Up*
__u)
const noexcept
722 template <
typename _Tp,
typename _Up>
723 static constexpr decltype(
auto)
727 template <
typename _Tp,
typename _Up>
728 static constexpr bool
737 template<
typename _Tp,
typename _Up,
typename =
void>
741 template<
typename _Tp,
typename _Up>
747 template<
typename _Tp,
typename _Up,
typename =
void>
751 template<
typename _Tp,
typename _Up>
756 template<
typename _Tp,
typename _Up>
773#if __cplusplus > 201103L
774 template<
typename _Tp =
void>
777 template<
typename _Tp =
void>
780 template<
typename _Tp =
void>
785 template<
typename _Tp>
790 operator()(
const _Tp& __x,
const _Tp&
__y)
const
791 {
return __x &&
__y; }
795 template<
typename _Tp>
800 operator()(
const _Tp& __x,
const _Tp&
__y)
const
801 {
return __x ||
__y; }
805 template<
typename _Tp>
810 operator()(
const _Tp& __x)
const
814#if __cplusplus > 201103L
819 template <
typename _Tp,
typename _Up>
822 operator()(_Tp&& __t,
_Up&&
__u)
const
834 template <
typename _Tp,
typename _Up>
837 operator()(_Tp&& __t,
_Up&&
__u)
const
849 template <
typename _Tp>
852 operator()(_Tp&& __t)
const
862#if __cplusplus > 201103L
863 template<
typename _Tp =
void>
866 template<
typename _Tp =
void>
869 template<
typename _Tp =
void>
872 template<
typename _Tp =
void>
878 template<
typename _Tp>
883 operator()(
const _Tp& __x,
const _Tp&
__y)
const
884 {
return __x &
__y; }
887 template<
typename _Tp>
888 struct bit_or :
public binary_function<_Tp, _Tp, _Tp>
892 operator()(
const _Tp& __x,
const _Tp& __y)
const
893 {
return __x | __y; }
896 template<
typename _Tp>
897 struct bit_xor :
public binary_function<_Tp, _Tp, _Tp>
901 operator()(
const _Tp& __x,
const _Tp& __y)
const
902 {
return __x ^ __y; }
905 template<
typename _Tp>
906 struct bit_not :
public unary_function<_Tp, _Tp>
910 operator()(
const _Tp& __x)
const
914#if __cplusplus > 201103L
918 template <
typename _Tp,
typename _Up>
921 operator()(_Tp&& __t, _Up&& __u)
const
926 typedef __is_transparent is_transparent;
932 template <
typename _Tp,
typename _Up>
935 operator()(_Tp&& __t, _Up&& __u)
const
940 typedef __is_transparent is_transparent;
946 template <
typename _Tp,
typename _Up>
949 operator()(_Tp&& __t, _Up&& __u)
const
954 typedef __is_transparent is_transparent;
960 template <
typename _Tp>
963 operator()(_Tp&& __t)
const
964 noexcept(
noexcept(
~std::forward<_Tp>(__t)))
965 ->
decltype(
~std::forward<_Tp>(__t))
966 {
return ~std::forward<_Tp>(__t); }
968 typedef __is_transparent is_transparent;
1002 template<
typename _Predicate>
1004 :
public unary_function<typename _Predicate::argument_type, bool>
1016 operator()(
const typename _Predicate::argument_type& __x)
const
1017 {
return !_M_pred(__x); }
1021 template<
typename _Predicate>
1028 template<
typename _Predicate>
1031 typename _Predicate::second_argument_type, bool>
1043 operator()(
const typename _Predicate::first_argument_type& __x,
1044 const typename _Predicate::second_argument_type&
__y)
const
1045 {
return !_M_pred(__x,
__y); }
1049 template<
typename _Predicate>
1079 template<
typename _Arg,
typename _Result>
1083 _Result (*_M_ptr)(_Arg);
1093 operator()(_Arg __x)
const
1094 {
return _M_ptr(__x); }
1098 template<
typename _Arg,
typename _Result>
1104 template<
typename _Arg1,
typename _Arg2,
typename _Result>
1120 {
return _M_ptr(__x,
__y); }
1124 template<
typename _Arg1,
typename _Arg2,
typename _Result>
1130 template<
typename _Tp>
1132 :
public unary_function<_Tp, _Tp>
1135 operator()(_Tp& __x)
const
1139 operator()(
const _Tp& __x)
const
1144 template<
typename _Tp>
struct _Identity<const _Tp> : _Identity<_Tp> { };
1146 template<
typename _Pair>
1148 :
public unary_function<_Pair, typename _Pair::first_type>
1150 typename _Pair::first_type&
1151 operator()(_Pair& __x)
const
1152 {
return __x.first; }
1154 const typename _Pair::first_type&
1155 operator()(
const _Pair& __x)
const
1156 {
return __x.first; }
1158#if __cplusplus >= 201103L
1159 template<
typename _Pair2>
1160 typename _Pair2::first_type&
1161 operator()(_Pair2& __x)
const
1162 {
return __x.first; }
1164 template<
typename _Pair2>
1165 const typename _Pair2::first_type&
1166 operator()(
const _Pair2& __x)
const
1167 {
return __x.first; }
1171 template<
typename _Pair>
1173 :
public unary_function<_Pair, typename _Pair::second_type>
1175 typename _Pair::second_type&
1176 operator()(_Pair& __x)
const
1177 {
return __x.second; }
1179 const typename _Pair::second_type&
1180 operator()(
const _Pair& __x)
const
1181 {
return __x.second; }
1202 template<
typename _Ret,
typename _Tp>
1211 operator()(_Tp* __p)
const
1212 {
return (__p->*_M_f)(); }
1215 _Ret (_Tp::*_M_f)();
1220 template<
typename _Ret,
typename _Tp>
1229 operator()(
const _Tp* __p)
const
1230 {
return (__p->*_M_f)(); }
1233 _Ret (_Tp::*_M_f)()
const;
1238 template<
typename _Ret,
typename _Tp>
1247 operator()(_Tp& __r)
const
1248 {
return (__r.*_M_f)(); }
1251 _Ret (_Tp::*_M_f)();
1256 template<
typename _Ret,
typename _Tp>
1265 operator()(
const _Tp& __r)
const
1266 {
return (__r.*_M_f)(); }
1269 _Ret (_Tp::*_M_f)()
const;
1274 template<
typename _Ret,
typename _Tp,
typename _Arg>
1283 operator()(_Tp* __p, _Arg __x)
const
1284 {
return (__p->*_M_f)(__x); }
1287 _Ret (_Tp::*_M_f)(_Arg);
1292 template<
typename _Ret,
typename _Tp,
typename _Arg>
1301 operator()(
const _Tp* __p, _Arg __x)
const
1302 {
return (__p->*_M_f)(__x); }
1305 _Ret (_Tp::*_M_f)(_Arg)
const;
1310 template<
typename _Ret,
typename _Tp,
typename _Arg>
1319 operator()(_Tp& __r, _Arg __x)
const
1320 {
return (__r.*_M_f)(__x); }
1323 _Ret (_Tp::*_M_f)(_Arg);
1328 template<
typename _Ret,
typename _Tp,
typename _Arg>
1337 operator()(
const _Tp& __r, _Arg __x)
const
1338 {
return (__r.*_M_f)(__x); }
1341 _Ret (_Tp::*_M_f)(_Arg)
const;
1346 template<
typename _Ret,
typename _Tp>
1348 mem_fun(
_Ret (_Tp::*__f)())
1351 template<
typename _Ret,
typename _Tp>
1352 inline const_mem_fun_t<_Ret, _Tp>
1353 mem_fun(_Ret (_Tp::*__f)() const)
1354 {
return const_mem_fun_t<_Ret, _Tp>(__f); }
1356 template<
typename _Ret,
typename _Tp>
1357 inline mem_fun_ref_t<_Ret, _Tp>
1358 mem_fun_ref(_Ret (_Tp::*__f)())
1359 {
return mem_fun_ref_t<_Ret, _Tp>(__f); }
1361 template<
typename _Ret,
typename _Tp>
1362 inline const_mem_fun_ref_t<_Ret, _Tp>
1363 mem_fun_ref(_Ret (_Tp::*__f)() const)
1364 {
return const_mem_fun_ref_t<_Ret, _Tp>(__f); }
1366 template<
typename _Ret,
typename _Tp,
typename _Arg>
1367 inline mem_fun1_t<_Ret, _Tp, _Arg>
1368 mem_fun(_Ret (_Tp::*__f)(_Arg))
1369 {
return mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
1371 template<
typename _Ret,
typename _Tp,
typename _Arg>
1372 inline const_mem_fun1_t<_Ret, _Tp, _Arg>
1373 mem_fun(_Ret (_Tp::*__f)(_Arg) const)
1374 {
return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
1376 template<
typename _Ret,
typename _Tp,
typename _Arg>
1377 inline mem_fun1_ref_t<_Ret, _Tp, _Arg>
1378 mem_fun_ref(_Ret (_Tp::*__f)(_Arg))
1379 {
return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
1381 template<
typename _Ret,
typename _Tp,
typename _Arg>
1382 inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg>
1383 mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const)
1384 {
return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
1388_GLIBCXX_END_NAMESPACE_VERSION
1391#if (__cplusplus < 201103L) || _GLIBCXX_USE_DEPRECATED
constexpr binary_negate< _Predicate > not2(const _Predicate &__pred)
One of the negation functors.
constexpr unary_negate< _Predicate > not1(const _Predicate &__pred)
One of the negation functors.
pointer_to_unary_function< _Arg, _Result > ptr_fun(_Result(*__x)(_Arg))
One of the adaptors for function pointers.
ISO C++ entities toplevel namespace is std.
_Arg argument_type
argument_type is the type of the argument
_Result result_type
result_type is the return type
_Result result_type
result_type is the return type
_Arg2 second_argument_type
second_argument_type is the type of the second argument
_Arg1 first_argument_type
first_argument_type is the type of the first argument
One of the math functors.
One of the math functors.
One of the math functors.
One of the math functors.
One of the math functors.
One of the math functors.
One of the comparison functors.
One of the comparison functors.
One of the comparison functors.
One of the comparison functors.
One of the comparison functors.
One of the comparison functors.
One of the Boolean operations functors.
One of the Boolean operations functors.
One of the Boolean operations functors.
One of the negation functors.
One of the negation functors.
One of the adaptors for function pointers.
One of the adaptors for function pointers.
One of the adaptors for member pointers.
One of the adaptors for member pointers.
One of the adaptors for member pointers.
One of the adaptors for member pointers.
One of the adaptors for member pointers.
One of the adaptors for member pointers.
One of the adaptors for member pointers.
One of the adaptors for member pointers.