xref: /netbsd-src/external/gpl3/gcc.old/dist/libstdc++-v3/include/bits/predefined_ops.h (revision 8feb0f0b7eaff0608f8350bbfa3098827b4bb91b)
11debfc3dSmrg // Default predicates for internal use -*- C++ -*-
21debfc3dSmrg 
3*8feb0f0bSmrg // Copyright (C) 2013-2020 Free Software Foundation, Inc.
41debfc3dSmrg //
51debfc3dSmrg // This file is part of the GNU ISO C++ Library.  This library is free
61debfc3dSmrg // software; you can redistribute it and/or modify it under the
71debfc3dSmrg // terms of the GNU General Public License as published by the
81debfc3dSmrg // Free Software Foundation; either version 3, or (at your option)
91debfc3dSmrg // any later version.
101debfc3dSmrg 
111debfc3dSmrg // This library is distributed in the hope that it will be useful,
121debfc3dSmrg // but WITHOUT ANY WARRANTY; without even the implied warranty of
131debfc3dSmrg // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
141debfc3dSmrg // GNU General Public License for more details.
151debfc3dSmrg 
161debfc3dSmrg // Under Section 7 of GPL version 3, you are granted additional
171debfc3dSmrg // permissions described in the GCC Runtime Library Exception, version
181debfc3dSmrg // 3.1, as published by the Free Software Foundation.
191debfc3dSmrg 
201debfc3dSmrg // You should have received a copy of the GNU General Public License and
211debfc3dSmrg // a copy of the GCC Runtime Library Exception along with this program;
221debfc3dSmrg // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
231debfc3dSmrg // <http://www.gnu.org/licenses/>.
241debfc3dSmrg 
251debfc3dSmrg /** @file predefined_ops.h
261debfc3dSmrg  *  This is an internal header file, included by other library headers.
271debfc3dSmrg  *  You should not attempt to use it directly. @headername{algorithm}
281debfc3dSmrg  */
291debfc3dSmrg 
301debfc3dSmrg #ifndef _GLIBCXX_PREDEFINED_OPS_H
311debfc3dSmrg #define _GLIBCXX_PREDEFINED_OPS_H	1
321debfc3dSmrg 
331debfc3dSmrg namespace __gnu_cxx
341debfc3dSmrg {
351debfc3dSmrg namespace __ops
361debfc3dSmrg {
371debfc3dSmrg   struct _Iter_less_iter
381debfc3dSmrg   {
391debfc3dSmrg     template<typename _Iterator1, typename _Iterator2>
401debfc3dSmrg       _GLIBCXX14_CONSTEXPR
411debfc3dSmrg       bool
operator_Iter_less_iter421debfc3dSmrg       operator()(_Iterator1 __it1, _Iterator2 __it2) const
431debfc3dSmrg       { return *__it1 < *__it2; }
441debfc3dSmrg   };
451debfc3dSmrg 
461debfc3dSmrg   _GLIBCXX14_CONSTEXPR
471debfc3dSmrg   inline _Iter_less_iter
__iter_less_iter()481debfc3dSmrg   __iter_less_iter()
491debfc3dSmrg   { return _Iter_less_iter(); }
501debfc3dSmrg 
511debfc3dSmrg   struct _Iter_less_val
521debfc3dSmrg   {
531debfc3dSmrg #if __cplusplus >= 201103L
541debfc3dSmrg     constexpr _Iter_less_val() = default;
551debfc3dSmrg #else
561debfc3dSmrg     _Iter_less_val() { }
571debfc3dSmrg #endif
581debfc3dSmrg 
59*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
601debfc3dSmrg     explicit
_Iter_less_val_Iter_less_val611debfc3dSmrg     _Iter_less_val(_Iter_less_iter) { }
621debfc3dSmrg 
631debfc3dSmrg     template<typename _Iterator, typename _Value>
64*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
651debfc3dSmrg       bool
operator_Iter_less_val661debfc3dSmrg       operator()(_Iterator __it, _Value& __val) const
671debfc3dSmrg       { return *__it < __val; }
681debfc3dSmrg   };
691debfc3dSmrg 
70*8feb0f0bSmrg   _GLIBCXX20_CONSTEXPR
711debfc3dSmrg   inline _Iter_less_val
__iter_less_val()721debfc3dSmrg   __iter_less_val()
731debfc3dSmrg   { return _Iter_less_val(); }
741debfc3dSmrg 
75*8feb0f0bSmrg   _GLIBCXX20_CONSTEXPR
761debfc3dSmrg   inline _Iter_less_val
__iter_comp_val(_Iter_less_iter)771debfc3dSmrg   __iter_comp_val(_Iter_less_iter)
781debfc3dSmrg   { return _Iter_less_val(); }
791debfc3dSmrg 
801debfc3dSmrg   struct _Val_less_iter
811debfc3dSmrg   {
821debfc3dSmrg #if __cplusplus >= 201103L
831debfc3dSmrg     constexpr _Val_less_iter() = default;
841debfc3dSmrg #else
851debfc3dSmrg     _Val_less_iter() { }
861debfc3dSmrg #endif
871debfc3dSmrg 
88*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
891debfc3dSmrg     explicit
_Val_less_iter_Val_less_iter901debfc3dSmrg     _Val_less_iter(_Iter_less_iter) { }
911debfc3dSmrg 
921debfc3dSmrg     template<typename _Value, typename _Iterator>
93*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
941debfc3dSmrg       bool
operator_Val_less_iter951debfc3dSmrg       operator()(_Value& __val, _Iterator __it) const
961debfc3dSmrg       { return __val < *__it; }
971debfc3dSmrg   };
981debfc3dSmrg 
99*8feb0f0bSmrg   _GLIBCXX20_CONSTEXPR
1001debfc3dSmrg   inline _Val_less_iter
__val_less_iter()1011debfc3dSmrg   __val_less_iter()
1021debfc3dSmrg   { return _Val_less_iter(); }
1031debfc3dSmrg 
104*8feb0f0bSmrg   _GLIBCXX20_CONSTEXPR
1051debfc3dSmrg   inline _Val_less_iter
__val_comp_iter(_Iter_less_iter)1061debfc3dSmrg   __val_comp_iter(_Iter_less_iter)
1071debfc3dSmrg   { return _Val_less_iter(); }
1081debfc3dSmrg 
1091debfc3dSmrg   struct _Iter_equal_to_iter
1101debfc3dSmrg   {
1111debfc3dSmrg     template<typename _Iterator1, typename _Iterator2>
112*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
1131debfc3dSmrg       bool
operator_Iter_equal_to_iter1141debfc3dSmrg       operator()(_Iterator1 __it1, _Iterator2 __it2) const
1151debfc3dSmrg       { return *__it1 == *__it2; }
1161debfc3dSmrg   };
1171debfc3dSmrg 
118*8feb0f0bSmrg   _GLIBCXX20_CONSTEXPR
1191debfc3dSmrg   inline _Iter_equal_to_iter
__iter_equal_to_iter()1201debfc3dSmrg   __iter_equal_to_iter()
1211debfc3dSmrg   { return _Iter_equal_to_iter(); }
1221debfc3dSmrg 
1231debfc3dSmrg   struct _Iter_equal_to_val
1241debfc3dSmrg   {
1251debfc3dSmrg     template<typename _Iterator, typename _Value>
126*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
1271debfc3dSmrg       bool
operator_Iter_equal_to_val1281debfc3dSmrg       operator()(_Iterator __it, _Value& __val) const
1291debfc3dSmrg       { return *__it == __val; }
1301debfc3dSmrg   };
1311debfc3dSmrg 
132*8feb0f0bSmrg   _GLIBCXX20_CONSTEXPR
1331debfc3dSmrg   inline _Iter_equal_to_val
__iter_equal_to_val()1341debfc3dSmrg   __iter_equal_to_val()
1351debfc3dSmrg   { return _Iter_equal_to_val(); }
1361debfc3dSmrg 
137*8feb0f0bSmrg   _GLIBCXX20_CONSTEXPR
1381debfc3dSmrg   inline _Iter_equal_to_val
__iter_comp_val(_Iter_equal_to_iter)1391debfc3dSmrg   __iter_comp_val(_Iter_equal_to_iter)
1401debfc3dSmrg   { return _Iter_equal_to_val(); }
1411debfc3dSmrg 
1421debfc3dSmrg   template<typename _Compare>
1431debfc3dSmrg     struct _Iter_comp_iter
1441debfc3dSmrg     {
1451debfc3dSmrg       _Compare _M_comp;
1461debfc3dSmrg 
1471debfc3dSmrg       explicit _GLIBCXX14_CONSTEXPR
_Iter_comp_iter_Iter_comp_iter1481debfc3dSmrg       _Iter_comp_iter(_Compare __comp)
1491debfc3dSmrg 	: _M_comp(_GLIBCXX_MOVE(__comp))
1501debfc3dSmrg       { }
1511debfc3dSmrg 
1521debfc3dSmrg       template<typename _Iterator1, typename _Iterator2>
1531debfc3dSmrg         _GLIBCXX14_CONSTEXPR
1541debfc3dSmrg         bool
operator_Iter_comp_iter1551debfc3dSmrg         operator()(_Iterator1 __it1, _Iterator2 __it2)
1561debfc3dSmrg         { return bool(_M_comp(*__it1, *__it2)); }
1571debfc3dSmrg     };
1581debfc3dSmrg 
1591debfc3dSmrg   template<typename _Compare>
1601debfc3dSmrg     _GLIBCXX14_CONSTEXPR
1611debfc3dSmrg     inline _Iter_comp_iter<_Compare>
__iter_comp_iter(_Compare __comp)1621debfc3dSmrg     __iter_comp_iter(_Compare __comp)
1631debfc3dSmrg     { return _Iter_comp_iter<_Compare>(_GLIBCXX_MOVE(__comp)); }
1641debfc3dSmrg 
1651debfc3dSmrg   template<typename _Compare>
1661debfc3dSmrg     struct _Iter_comp_val
1671debfc3dSmrg     {
1681debfc3dSmrg       _Compare _M_comp;
1691debfc3dSmrg 
170*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
1711debfc3dSmrg       explicit
_Iter_comp_val_Iter_comp_val1721debfc3dSmrg       _Iter_comp_val(_Compare __comp)
1731debfc3dSmrg 	: _M_comp(_GLIBCXX_MOVE(__comp))
1741debfc3dSmrg       { }
1751debfc3dSmrg 
176*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
1771debfc3dSmrg       explicit
_Iter_comp_val_Iter_comp_val1781debfc3dSmrg       _Iter_comp_val(const _Iter_comp_iter<_Compare>& __comp)
1791debfc3dSmrg 	: _M_comp(__comp._M_comp)
1801debfc3dSmrg       { }
1811debfc3dSmrg 
1821debfc3dSmrg #if __cplusplus >= 201103L
183*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
1841debfc3dSmrg       explicit
_Iter_comp_val_Iter_comp_val1851debfc3dSmrg       _Iter_comp_val(_Iter_comp_iter<_Compare>&& __comp)
1861debfc3dSmrg 	: _M_comp(std::move(__comp._M_comp))
1871debfc3dSmrg       { }
1881debfc3dSmrg #endif
1891debfc3dSmrg 
1901debfc3dSmrg       template<typename _Iterator, typename _Value>
191*8feb0f0bSmrg 	_GLIBCXX20_CONSTEXPR
1921debfc3dSmrg 	bool
operator_Iter_comp_val1931debfc3dSmrg 	operator()(_Iterator __it, _Value& __val)
1941debfc3dSmrg 	{ return bool(_M_comp(*__it, __val)); }
1951debfc3dSmrg     };
1961debfc3dSmrg 
1971debfc3dSmrg   template<typename _Compare>
198*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
1991debfc3dSmrg     inline _Iter_comp_val<_Compare>
__iter_comp_val(_Compare __comp)2001debfc3dSmrg     __iter_comp_val(_Compare __comp)
2011debfc3dSmrg     { return _Iter_comp_val<_Compare>(_GLIBCXX_MOVE(__comp)); }
2021debfc3dSmrg 
2031debfc3dSmrg   template<typename _Compare>
204*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2051debfc3dSmrg     inline _Iter_comp_val<_Compare>
__iter_comp_val(_Iter_comp_iter<_Compare> __comp)2061debfc3dSmrg     __iter_comp_val(_Iter_comp_iter<_Compare> __comp)
2071debfc3dSmrg     { return _Iter_comp_val<_Compare>(_GLIBCXX_MOVE(__comp)); }
2081debfc3dSmrg 
2091debfc3dSmrg   template<typename _Compare>
2101debfc3dSmrg     struct _Val_comp_iter
2111debfc3dSmrg     {
2121debfc3dSmrg       _Compare _M_comp;
2131debfc3dSmrg 
214*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
2151debfc3dSmrg       explicit
_Val_comp_iter_Val_comp_iter2161debfc3dSmrg       _Val_comp_iter(_Compare __comp)
2171debfc3dSmrg 	: _M_comp(_GLIBCXX_MOVE(__comp))
2181debfc3dSmrg       { }
2191debfc3dSmrg 
220*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
2211debfc3dSmrg       explicit
_Val_comp_iter_Val_comp_iter2221debfc3dSmrg       _Val_comp_iter(const _Iter_comp_iter<_Compare>& __comp)
2231debfc3dSmrg 	: _M_comp(__comp._M_comp)
2241debfc3dSmrg       { }
2251debfc3dSmrg 
2261debfc3dSmrg #if __cplusplus >= 201103L
227*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
2281debfc3dSmrg       explicit
_Val_comp_iter_Val_comp_iter2291debfc3dSmrg       _Val_comp_iter(_Iter_comp_iter<_Compare>&& __comp)
2301debfc3dSmrg 	: _M_comp(std::move(__comp._M_comp))
2311debfc3dSmrg       { }
2321debfc3dSmrg #endif
2331debfc3dSmrg 
2341debfc3dSmrg       template<typename _Value, typename _Iterator>
235*8feb0f0bSmrg 	_GLIBCXX20_CONSTEXPR
2361debfc3dSmrg 	bool
operator_Val_comp_iter2371debfc3dSmrg 	operator()(_Value& __val, _Iterator __it)
2381debfc3dSmrg 	{ return bool(_M_comp(__val, *__it)); }
2391debfc3dSmrg     };
2401debfc3dSmrg 
2411debfc3dSmrg   template<typename _Compare>
242*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2431debfc3dSmrg     inline _Val_comp_iter<_Compare>
__val_comp_iter(_Compare __comp)2441debfc3dSmrg     __val_comp_iter(_Compare __comp)
2451debfc3dSmrg     { return _Val_comp_iter<_Compare>(_GLIBCXX_MOVE(__comp)); }
2461debfc3dSmrg 
2471debfc3dSmrg   template<typename _Compare>
248*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2491debfc3dSmrg     inline _Val_comp_iter<_Compare>
__val_comp_iter(_Iter_comp_iter<_Compare> __comp)2501debfc3dSmrg     __val_comp_iter(_Iter_comp_iter<_Compare> __comp)
2511debfc3dSmrg     { return _Val_comp_iter<_Compare>(_GLIBCXX_MOVE(__comp)); }
2521debfc3dSmrg 
2531debfc3dSmrg   template<typename _Value>
2541debfc3dSmrg     struct _Iter_equals_val
2551debfc3dSmrg     {
2561debfc3dSmrg       _Value& _M_value;
2571debfc3dSmrg 
258*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
2591debfc3dSmrg       explicit
_Iter_equals_val_Iter_equals_val2601debfc3dSmrg       _Iter_equals_val(_Value& __value)
2611debfc3dSmrg 	: _M_value(__value)
2621debfc3dSmrg       { }
2631debfc3dSmrg 
2641debfc3dSmrg       template<typename _Iterator>
265*8feb0f0bSmrg 	_GLIBCXX20_CONSTEXPR
2661debfc3dSmrg 	bool
operator_Iter_equals_val2671debfc3dSmrg 	operator()(_Iterator __it)
2681debfc3dSmrg 	{ return *__it == _M_value; }
2691debfc3dSmrg     };
2701debfc3dSmrg 
2711debfc3dSmrg   template<typename _Value>
272*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2731debfc3dSmrg     inline _Iter_equals_val<_Value>
__iter_equals_val(_Value & __val)2741debfc3dSmrg     __iter_equals_val(_Value& __val)
2751debfc3dSmrg     { return _Iter_equals_val<_Value>(__val); }
2761debfc3dSmrg 
2771debfc3dSmrg   template<typename _Iterator1>
2781debfc3dSmrg     struct _Iter_equals_iter
2791debfc3dSmrg     {
2801debfc3dSmrg       _Iterator1 _M_it1;
2811debfc3dSmrg 
282*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
2831debfc3dSmrg       explicit
_Iter_equals_iter_Iter_equals_iter2841debfc3dSmrg       _Iter_equals_iter(_Iterator1 __it1)
2851debfc3dSmrg 	: _M_it1(__it1)
2861debfc3dSmrg       { }
2871debfc3dSmrg 
2881debfc3dSmrg       template<typename _Iterator2>
289*8feb0f0bSmrg 	_GLIBCXX20_CONSTEXPR
2901debfc3dSmrg 	bool
operator_Iter_equals_iter2911debfc3dSmrg 	operator()(_Iterator2 __it2)
2921debfc3dSmrg 	{ return *__it2 == *_M_it1; }
2931debfc3dSmrg     };
2941debfc3dSmrg 
2951debfc3dSmrg   template<typename _Iterator>
296*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2971debfc3dSmrg     inline _Iter_equals_iter<_Iterator>
__iter_comp_iter(_Iter_equal_to_iter,_Iterator __it)2981debfc3dSmrg     __iter_comp_iter(_Iter_equal_to_iter, _Iterator __it)
2991debfc3dSmrg     { return _Iter_equals_iter<_Iterator>(__it); }
3001debfc3dSmrg 
3011debfc3dSmrg   template<typename _Predicate>
3021debfc3dSmrg     struct _Iter_pred
3031debfc3dSmrg     {
3041debfc3dSmrg       _Predicate _M_pred;
3051debfc3dSmrg 
306*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
3071debfc3dSmrg       explicit
_Iter_pred_Iter_pred3081debfc3dSmrg       _Iter_pred(_Predicate __pred)
3091debfc3dSmrg 	: _M_pred(_GLIBCXX_MOVE(__pred))
3101debfc3dSmrg       { }
3111debfc3dSmrg 
3121debfc3dSmrg       template<typename _Iterator>
313*8feb0f0bSmrg 	_GLIBCXX20_CONSTEXPR
3141debfc3dSmrg 	bool
operator_Iter_pred3151debfc3dSmrg 	operator()(_Iterator __it)
3161debfc3dSmrg 	{ return bool(_M_pred(*__it)); }
3171debfc3dSmrg     };
3181debfc3dSmrg 
3191debfc3dSmrg   template<typename _Predicate>
320*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3211debfc3dSmrg     inline _Iter_pred<_Predicate>
__pred_iter(_Predicate __pred)3221debfc3dSmrg     __pred_iter(_Predicate __pred)
3231debfc3dSmrg     { return _Iter_pred<_Predicate>(_GLIBCXX_MOVE(__pred)); }
3241debfc3dSmrg 
3251debfc3dSmrg   template<typename _Compare, typename _Value>
3261debfc3dSmrg     struct _Iter_comp_to_val
3271debfc3dSmrg     {
3281debfc3dSmrg       _Compare _M_comp;
3291debfc3dSmrg       _Value& _M_value;
3301debfc3dSmrg 
331*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
_Iter_comp_to_val_Iter_comp_to_val3321debfc3dSmrg       _Iter_comp_to_val(_Compare __comp, _Value& __value)
3331debfc3dSmrg 	: _M_comp(_GLIBCXX_MOVE(__comp)), _M_value(__value)
3341debfc3dSmrg       { }
3351debfc3dSmrg 
3361debfc3dSmrg       template<typename _Iterator>
337*8feb0f0bSmrg 	_GLIBCXX20_CONSTEXPR
3381debfc3dSmrg 	bool
operator_Iter_comp_to_val3391debfc3dSmrg 	operator()(_Iterator __it)
3401debfc3dSmrg 	{ return bool(_M_comp(*__it, _M_value)); }
3411debfc3dSmrg     };
3421debfc3dSmrg 
3431debfc3dSmrg   template<typename _Compare, typename _Value>
3441debfc3dSmrg     _Iter_comp_to_val<_Compare, _Value>
345*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
__iter_comp_val(_Compare __comp,_Value & __val)3461debfc3dSmrg     __iter_comp_val(_Compare __comp, _Value &__val)
3471debfc3dSmrg     {
3481debfc3dSmrg       return _Iter_comp_to_val<_Compare, _Value>(_GLIBCXX_MOVE(__comp), __val);
3491debfc3dSmrg     }
3501debfc3dSmrg 
3511debfc3dSmrg   template<typename _Compare, typename _Iterator1>
3521debfc3dSmrg     struct _Iter_comp_to_iter
3531debfc3dSmrg     {
3541debfc3dSmrg       _Compare _M_comp;
3551debfc3dSmrg       _Iterator1 _M_it1;
3561debfc3dSmrg 
357*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
_Iter_comp_to_iter_Iter_comp_to_iter3581debfc3dSmrg       _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1)
3591debfc3dSmrg 	: _M_comp(_GLIBCXX_MOVE(__comp)), _M_it1(__it1)
3601debfc3dSmrg       { }
3611debfc3dSmrg 
3621debfc3dSmrg       template<typename _Iterator2>
363*8feb0f0bSmrg 	_GLIBCXX20_CONSTEXPR
3641debfc3dSmrg 	bool
operator_Iter_comp_to_iter3651debfc3dSmrg 	operator()(_Iterator2 __it2)
3661debfc3dSmrg 	{ return bool(_M_comp(*__it2, *_M_it1)); }
3671debfc3dSmrg     };
3681debfc3dSmrg 
3691debfc3dSmrg   template<typename _Compare, typename _Iterator>
370*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3711debfc3dSmrg     inline _Iter_comp_to_iter<_Compare, _Iterator>
__iter_comp_iter(_Iter_comp_iter<_Compare> __comp,_Iterator __it)3721debfc3dSmrg     __iter_comp_iter(_Iter_comp_iter<_Compare> __comp, _Iterator __it)
3731debfc3dSmrg     {
3741debfc3dSmrg       return _Iter_comp_to_iter<_Compare, _Iterator>(
3751debfc3dSmrg 	  _GLIBCXX_MOVE(__comp._M_comp), __it);
3761debfc3dSmrg     }
3771debfc3dSmrg 
3781debfc3dSmrg   template<typename _Predicate>
3791debfc3dSmrg     struct _Iter_negate
3801debfc3dSmrg     {
3811debfc3dSmrg       _Predicate _M_pred;
3821debfc3dSmrg 
383*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
3841debfc3dSmrg       explicit
_Iter_negate_Iter_negate3851debfc3dSmrg       _Iter_negate(_Predicate __pred)
3861debfc3dSmrg 	: _M_pred(_GLIBCXX_MOVE(__pred))
3871debfc3dSmrg       { }
3881debfc3dSmrg 
3891debfc3dSmrg       template<typename _Iterator>
390*8feb0f0bSmrg 	_GLIBCXX20_CONSTEXPR
3911debfc3dSmrg 	bool
operator_Iter_negate3921debfc3dSmrg 	operator()(_Iterator __it)
3931debfc3dSmrg 	{ return !bool(_M_pred(*__it)); }
3941debfc3dSmrg     };
3951debfc3dSmrg 
3961debfc3dSmrg   template<typename _Predicate>
397*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3981debfc3dSmrg     inline _Iter_negate<_Predicate>
__negate(_Iter_pred<_Predicate> __pred)3991debfc3dSmrg     __negate(_Iter_pred<_Predicate> __pred)
4001debfc3dSmrg     { return _Iter_negate<_Predicate>(_GLIBCXX_MOVE(__pred._M_pred)); }
4011debfc3dSmrg 
4021debfc3dSmrg } // namespace __ops
4031debfc3dSmrg } // namespace __gnu_cxx
4041debfc3dSmrg 
4051debfc3dSmrg #endif
406