1 // TR1 functional header -*- C++ -*-
3 // Copyright (C) 2004, 2005 Free Software Foundation, Inc.
5 // This file is part of the GNU ISO C++ Library. This library is free
6 // software; you can redistribute it and/or modify it under the
7 // terms of the GNU General Public License as published by the
8 // Free Software Foundation; either version 2, or (at your option)
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING. If not, write to the Free
18 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
21 // As a special exception, you may use this file as part of a free software
22 // library without restriction. Specifically, if other files instantiate
23 // templates or use macros or inline functions from this file, or you compile
24 // this file and link it with other files to produce an executable, this
25 // file does not by itself cause the resulting executable to be covered by
26 // the GNU General Public License. This exception does not however
27 // invalidate any other reasons why the executable file might be covered by
28 // the GNU General Public License.
31 * This is a TR1 C++ Library header.
34 #ifndef _TR1_FUNCTIONAL
35 #define _TR1_FUNCTIONAL 1
37 #include "../functional"
39 #include <tr1/type_traits>
40 #include "../bits/cpp_type_traits.h"
41 #include <string> // for std::tr1::hash
42 #include <cstdlib> // for std::abort
48 template<typename _Tp>
49 class reference_wrapper
54 explicit reference_wrapper(_Tp& __indata): _M_data(&__indata)
57 reference_wrapper(const reference_wrapper<_Tp>& __inref):
58 _M_data(__inref._M_data)
62 operator=(const reference_wrapper<_Tp>& __inref)
64 _M_data = __inref._M_data;
69 { return this->get(); }
76 // Denotes a reference should be taken to a variable.
77 template<typename _Tp>
78 reference_wrapper<_Tp>
80 { return reference_wrapper<_Tp>(__t); }
82 // Denotes a const reference should be taken to a variable.
83 template<typename _Tp>
84 reference_wrapper<const _Tp>
86 { return reference_wrapper<const _Tp>(__t); }
88 template<typename _Tp>
89 reference_wrapper<_Tp> ref(reference_wrapper<_Tp> __t)
90 { return ref(__t.get()); }
92 template<typename _Tp>
93 reference_wrapper<const _Tp> cref(reference_wrapper<_Tp> __t)
94 { return cref(__t.get()); }
96 template<typename _MemberPointer>
99 template<typename _Tp, bool>
100 struct _Mem_fn_const_or_non
102 typedef const _Tp& type;
105 template<typename _Tp>
106 struct _Mem_fn_const_or_non<_Tp, false>
111 template<typename _Res, typename _Class>
112 class _Mem_fn<_Res _Class::*>
114 // This bit of genius is due to Peter Dimov, improved slightly by
116 template<typename _Tp>
118 _M_call(_Tp& __object, _Class *) const
119 { return __object.*__pm; }
121 template<typename _Tp, typename _Up>
123 _M_call(_Tp& __object, _Up * const *) const
124 { return (*__object).*__pm; }
126 template<typename _Tp, typename _Up>
128 _M_call(_Tp& __object, const _Up * const *) const
129 { return (*__object).*__pm; }
131 template<typename _Tp>
133 _M_call(_Tp& __object, const _Class *) const
134 { return __object.*__pm; }
136 template<typename _Tp>
138 _M_call(_Tp& __ptr, const volatile void*) const
139 { return (*__ptr).*__pm; }
141 template<typename _Tp> static _Tp& __get_ref();
143 template<typename _Tp>
144 static __sfinae_types::__one __check_const(_Tp&, _Class*);
145 template<typename _Tp, typename _Up>
146 static __sfinae_types::__one __check_const(_Tp&, _Up * const *);
147 template<typename _Tp, typename _Up>
148 static __sfinae_types::__two __check_const(_Tp&, const _Up * const *);
149 template<typename _Tp>
150 static __sfinae_types::__two __check_const(_Tp&, const _Class*);
151 template<typename _Tp>
152 static __sfinae_types::__two __check_const(_Tp&, const volatile void*);
154 template<typename _Tp>
156 : _Mem_fn_const_or_non<
158 (sizeof(__sfinae_types::__two)
159 == sizeof(__check_const<_Tp>(__get_ref<_Tp>(), (_Tp*)0)))>
163 explicit _Mem_fn(_Res _Class::*__pm) : __pm(__pm) { }
166 _Res& operator()(_Class& __object) const
167 { return __object.*__pm; }
169 const _Res& operator()(const _Class& __object) const
170 { return __object.*__pm; }
173 _Res& operator()(_Class* __object) const
174 { return __object->*__pm; }
177 operator()(const _Class* __object) const
178 { return __object->*__pm; }
180 // Handle smart pointers and derived
181 template<typename _Tp>
182 typename _Result_type<_Tp>::type
183 operator()(_Tp& __unknown) const
184 { return _M_call(__unknown, &__unknown); }
191 * @brief Returns a function object that forwards to the member
194 template<typename _Tp, typename _Class>
195 inline _Mem_fn<_Tp _Class::*>
196 mem_fn(_Tp _Class::* __pm)
198 return _Mem_fn<_Tp _Class::*>(__pm);
202 * @brief Exception class thrown when class template function's
203 * operator() is called with an empty target.
206 class bad_function_call : public std::exception { };
210 * The integral constant expression 0 can be converted into a
211 * pointer to this type. It is used by the function template to
212 * accept NULL pointers.
215 struct _M_clear_type;
219 * Trait identifying "location-invariant" types, meaning that the
220 * address of the object (or any of its members) will not escape.
221 * Also implies a trivial copy constructor and assignment operator.
224 template<typename _Tp>
225 struct __is_location_invariant
226 : integral_constant<bool,
227 (is_pointer<_Tp>::value
228 || is_member_pointer<_Tp>::value)>
232 class _Undefined_class;
237 const void* _M_const_object;
238 void (*_M_function_pointer)();
239 void (_Undefined_class::*_M_member_pointer)();
243 void* _M_access() { return &_M_pod_data[0]; }
244 const void* _M_access() const { return &_M_pod_data[0]; }
246 template<typename _Tp> _Tp& _M_access()
247 { return *static_cast<_Tp*>(_M_access()); }
249 template<typename _Tp> const _Tp& _M_access() const
250 { return *static_cast<const _Tp*>(_M_access()); }
252 _Nocopy_types _M_unused;
253 char _M_pod_data[sizeof(_Nocopy_types)];
256 enum _Manager_operation
264 /* Simple type wrapper that helps avoid annoying const problems
265 when casting between void pointers and pointers-to-pointers. */
266 template<typename _Tp>
267 struct _Simple_type_wrapper
269 _Simple_type_wrapper(_Tp __value) : __value(__value) { }
274 template<typename _Tp>
275 struct __is_location_invariant<_Simple_type_wrapper<_Tp> >
276 : __is_location_invariant<_Tp>
280 // Converts a reference to a function object into a callable
282 template<typename _Functor>
283 inline _Functor& __callable_functor(_Functor& __f) { return __f; }
285 template<typename _Member, typename _Class>
286 inline _Mem_fn<_Member _Class::*>
287 __callable_functor(_Member _Class::* &__p)
288 { return mem_fn(__p); }
290 template<typename _Member, typename _Class>
291 inline _Mem_fn<_Member _Class::*>
292 __callable_functor(_Member _Class::* const &__p)
293 { return mem_fn(__p); }
295 template<typename _Signature, typename _Functor>
296 class _Function_handler;
298 template<typename _Signature>
304 * Base class of all polymorphic function object wrappers.
310 static const std::size_t _M_max_size = sizeof(_Nocopy_types);
311 static const std::size_t _M_max_align = __alignof__(_Nocopy_types);
313 template<typename _Functor>
317 static const bool __stored_locally =
318 (__is_location_invariant<_Functor>::value
319 && sizeof(_Functor) <= _M_max_size
320 && __alignof__(_Functor) <= _M_max_align
321 && (_M_max_align % __alignof__(_Functor) == 0));
322 typedef integral_constant<bool, __stored_locally> _Local_storage;
324 // Retrieve a pointer to the function object
325 static _Functor* _M_get_pointer(const _Any_data& __source)
327 const _Functor* __ptr =
328 __stored_locally? &__source._M_access<_Functor>()
329 /* have stored a pointer */ : __source._M_access<_Functor*>();
330 return const_cast<_Functor*>(__ptr);
333 // Clone a location-invariant function object that fits within
334 // an _Any_data structure.
336 _M_clone(_Any_data& __dest, const _Any_data& __source, true_type)
338 new (__dest._M_access()) _Functor(__source._M_access<_Functor>());
341 // Clone a function object that is not location-invariant or
342 // that cannot fit into an _Any_data structure.
344 _M_clone(_Any_data& __dest, const _Any_data& __source, false_type)
346 __dest._M_access<_Functor*>() =
347 new _Functor(*__source._M_access<_Functor*>());
350 // Destroying a location-invariant object may still require
353 _M_destroy(_Any_data& __victim, true_type)
355 __victim._M_access<_Functor>().~_Functor();
358 // Destroying an object located on the heap.
360 _M_destroy(_Any_data& __victim, false_type)
362 delete __victim._M_access<_Functor*>();
367 _M_manager(_Any_data& __dest, const _Any_data& __source,
368 _Manager_operation __op)
371 case __get_type_info:
372 __dest._M_access<const type_info*>() = &typeid(_Functor);
375 case __get_functor_ptr:
376 __dest._M_access<_Functor*>() = _M_get_pointer(__source);
379 case __clone_functor:
380 _M_clone(__dest, __source, _Local_storage());
383 case __destroy_functor:
384 _M_destroy(__dest, _Local_storage());
391 _M_init_functor(_Any_data& __functor, const _Functor& __f)
393 _M_init_functor(__functor, __f, _Local_storage());
396 template<typename _Signature>
398 _M_not_empty_function(const function<_Signature>& __f)
403 template<typename _Tp>
405 _M_not_empty_function(const _Tp*& __fp)
410 template<typename _Class, typename _Tp>
412 _M_not_empty_function(_Tp _Class::* const& __mp)
417 template<typename _Tp>
419 _M_not_empty_function(const _Tp&)
426 _M_init_functor(_Any_data& __functor, const _Functor& __f, true_type)
428 new (__functor._M_access()) _Functor(__f);
432 _M_init_functor(_Any_data& __functor, const _Functor& __f, false_type)
434 __functor._M_access<_Functor*>() = new _Functor(__f);
438 template<typename _Functor>
439 class _Ref_manager : public _Base_manager<_Functor*>
441 typedef _Function_base::_Base_manager<_Functor*> _Base;
445 _M_manager(_Any_data& __dest, const _Any_data& __source,
446 _Manager_operation __op)
449 case __get_type_info:
450 __dest._M_access<const type_info*>() = &typeid(_Functor);
453 case __get_functor_ptr:
454 __dest._M_access<_Functor*>() = *_Base::_M_get_pointer(__source);
455 return is_const<_Functor>::value;
459 _Base::_M_manager(__dest, __source, __op);
465 _M_init_functor(_Any_data& __functor, reference_wrapper<_Functor> __f)
467 // TBD: Use address_of function instead
468 _Base::_M_init_functor(__functor, &__f.get());
472 _Function_base() : _M_manager(0) { }
478 _M_manager(_M_functor, _M_functor, __destroy_functor);
483 bool _M_empty() const { return !_M_manager; }
485 typedef bool (*_Manager_type)(_Any_data&, const _Any_data&,
488 _Any_data _M_functor;
489 _Manager_type _M_manager;
492 #define _GLIBCXX_NUM_ARGS 0
493 #define _GLIBCXX_COMMA
494 #define _GLIBCXX_TEMPLATE_PARAMS
495 #define _GLIBCXX_TEMPLATE_ARGS
496 #define _GLIBCXX_PARAMS
497 #define _GLIBCXX_ARGS
498 #define _GLIBCXX_COMMA_SHIFTED
499 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
500 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED
501 #define _GLIBCXX_PARAMS_SHIFTED
502 #define _GLIBCXX_ARGS_SHIFTED
503 #include <tr1/functional_iterate.h>
504 #undef _GLIBCXX_ARGS_SHIFTED
505 #undef _GLIBCXX_PARAMS_SHIFTED
506 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
507 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
508 #undef _GLIBCXX_COMMA_SHIFTED
510 #undef _GLIBCXX_PARAMS
511 #undef _GLIBCXX_TEMPLATE_ARGS
512 #undef _GLIBCXX_TEMPLATE_PARAMS
513 #undef _GLIBCXX_COMMA
514 #undef _GLIBCXX_NUM_ARGS
516 #define _GLIBCXX_NUM_ARGS 1
517 #define _GLIBCXX_COMMA ,
518 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1
519 #define _GLIBCXX_TEMPLATE_ARGS _T1
520 #define _GLIBCXX_PARAMS _T1 __a1
521 #define _GLIBCXX_ARGS __a1
522 #define _GLIBCXX_COMMA_SHIFTED
523 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
524 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED
525 #define _GLIBCXX_PARAMS_SHIFTED
526 #define _GLIBCXX_ARGS_SHIFTED
527 #include <tr1/functional_iterate.h>
528 #undef _GLIBCXX_ARGS_SHIFTED
529 #undef _GLIBCXX_PARAMS_SHIFTED
530 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
531 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
532 #undef _GLIBCXX_COMMA_SHIFTED
534 #undef _GLIBCXX_PARAMS
535 #undef _GLIBCXX_TEMPLATE_ARGS
536 #undef _GLIBCXX_TEMPLATE_PARAMS
537 #undef _GLIBCXX_COMMA
538 #undef _GLIBCXX_NUM_ARGS
540 #define _GLIBCXX_NUM_ARGS 2
541 #define _GLIBCXX_COMMA ,
542 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2
543 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2
544 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2
545 #define _GLIBCXX_ARGS __a1, __a2
546 #define _GLIBCXX_COMMA_SHIFTED ,
547 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1
548 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1
549 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1
550 #define _GLIBCXX_ARGS_SHIFTED __a1
551 #include <tr1/functional_iterate.h>
552 #undef _GLIBCXX_ARGS_SHIFTED
553 #undef _GLIBCXX_PARAMS_SHIFTED
554 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
555 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
556 #undef _GLIBCXX_COMMA_SHIFTED
558 #undef _GLIBCXX_PARAMS
559 #undef _GLIBCXX_TEMPLATE_ARGS
560 #undef _GLIBCXX_TEMPLATE_PARAMS
561 #undef _GLIBCXX_COMMA
562 #undef _GLIBCXX_NUM_ARGS
564 #define _GLIBCXX_NUM_ARGS 3
565 #define _GLIBCXX_COMMA ,
566 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3
567 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3
568 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3
569 #define _GLIBCXX_ARGS __a1, __a2, __a3
570 #define _GLIBCXX_COMMA_SHIFTED ,
571 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2
572 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2
573 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2
574 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2
575 #include <tr1/functional_iterate.h>
576 #undef _GLIBCXX_ARGS_SHIFTED
577 #undef _GLIBCXX_PARAMS_SHIFTED
578 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
579 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
580 #undef _GLIBCXX_COMMA_SHIFTED
582 #undef _GLIBCXX_PARAMS
583 #undef _GLIBCXX_TEMPLATE_ARGS
584 #undef _GLIBCXX_TEMPLATE_PARAMS
585 #undef _GLIBCXX_COMMA
586 #undef _GLIBCXX_NUM_ARGS
588 #define _GLIBCXX_NUM_ARGS 4
589 #define _GLIBCXX_COMMA ,
590 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4
591 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4
592 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4
593 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4
594 #define _GLIBCXX_COMMA_SHIFTED ,
595 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3
596 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3
597 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3
598 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3
599 #include <tr1/functional_iterate.h>
600 #undef _GLIBCXX_ARGS_SHIFTED
601 #undef _GLIBCXX_PARAMS_SHIFTED
602 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
603 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
604 #undef _GLIBCXX_COMMA_SHIFTED
606 #undef _GLIBCXX_PARAMS
607 #undef _GLIBCXX_TEMPLATE_ARGS
608 #undef _GLIBCXX_TEMPLATE_PARAMS
609 #undef _GLIBCXX_COMMA
610 #undef _GLIBCXX_NUM_ARGS
612 #define _GLIBCXX_NUM_ARGS 5
613 #define _GLIBCXX_COMMA ,
614 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5
615 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5
616 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5
617 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5
618 #define _GLIBCXX_COMMA_SHIFTED ,
619 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4
620 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4
621 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4
622 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4
623 #include <tr1/functional_iterate.h>
624 #undef _GLIBCXX_ARGS_SHIFTED
625 #undef _GLIBCXX_PARAMS_SHIFTED
626 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
627 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
628 #undef _GLIBCXX_COMMA_SHIFTED
630 #undef _GLIBCXX_PARAMS
631 #undef _GLIBCXX_TEMPLATE_ARGS
632 #undef _GLIBCXX_TEMPLATE_PARAMS
633 #undef _GLIBCXX_COMMA
634 #undef _GLIBCXX_NUM_ARGS
636 #define _GLIBCXX_NUM_ARGS 6
637 #define _GLIBCXX_COMMA ,
638 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6
639 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6
640 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6
641 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6
642 #define _GLIBCXX_COMMA_SHIFTED ,
643 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5
644 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5
645 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5
646 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5
647 #include <tr1/functional_iterate.h>
648 #undef _GLIBCXX_ARGS_SHIFTED
649 #undef _GLIBCXX_PARAMS_SHIFTED
650 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
651 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
652 #undef _GLIBCXX_COMMA_SHIFTED
654 #undef _GLIBCXX_PARAMS
655 #undef _GLIBCXX_TEMPLATE_ARGS
656 #undef _GLIBCXX_TEMPLATE_PARAMS
657 #undef _GLIBCXX_COMMA
658 #undef _GLIBCXX_NUM_ARGS
660 #define _GLIBCXX_NUM_ARGS 7
661 #define _GLIBCXX_COMMA ,
662 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7
663 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7
664 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7
665 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7
666 #define _GLIBCXX_COMMA_SHIFTED ,
667 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6
668 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6
669 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6
670 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6
671 #include <tr1/functional_iterate.h>
672 #undef _GLIBCXX_ARGS_SHIFTED
673 #undef _GLIBCXX_PARAMS_SHIFTED
674 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
675 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
676 #undef _GLIBCXX_COMMA_SHIFTED
678 #undef _GLIBCXX_PARAMS
679 #undef _GLIBCXX_TEMPLATE_ARGS
680 #undef _GLIBCXX_TEMPLATE_PARAMS
681 #undef _GLIBCXX_COMMA
682 #undef _GLIBCXX_NUM_ARGS
684 #define _GLIBCXX_NUM_ARGS 8
685 #define _GLIBCXX_COMMA ,
686 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8
687 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8
688 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8
689 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8
690 #define _GLIBCXX_COMMA_SHIFTED ,
691 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7
692 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7
693 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7
694 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7
695 #include <tr1/functional_iterate.h>
696 #undef _GLIBCXX_ARGS_SHIFTED
697 #undef _GLIBCXX_PARAMS_SHIFTED
698 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
699 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
700 #undef _GLIBCXX_COMMA_SHIFTED
702 #undef _GLIBCXX_PARAMS
703 #undef _GLIBCXX_TEMPLATE_ARGS
704 #undef _GLIBCXX_TEMPLATE_PARAMS
705 #undef _GLIBCXX_COMMA
706 #undef _GLIBCXX_NUM_ARGS
708 #define _GLIBCXX_NUM_ARGS 9
709 #define _GLIBCXX_COMMA ,
710 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9
711 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9
712 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9
713 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9
714 #define _GLIBCXX_COMMA_SHIFTED ,
715 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8
716 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8
717 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8
718 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8
719 #include <tr1/functional_iterate.h>
720 #undef _GLIBCXX_ARGS_SHIFTED
721 #undef _GLIBCXX_PARAMS_SHIFTED
722 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
723 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
724 #undef _GLIBCXX_COMMA_SHIFTED
726 #undef _GLIBCXX_PARAMS
727 #undef _GLIBCXX_TEMPLATE_ARGS
728 #undef _GLIBCXX_TEMPLATE_PARAMS
729 #undef _GLIBCXX_COMMA
730 #undef _GLIBCXX_NUM_ARGS
732 #define _GLIBCXX_NUM_ARGS 10
733 #define _GLIBCXX_COMMA ,
734 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10
735 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10
736 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10
737 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10
738 #define _GLIBCXX_COMMA_SHIFTED ,
739 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9
740 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9
741 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9
742 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9
743 #include <tr1/functional_iterate.h>
744 #undef _GLIBCXX_ARGS_SHIFTED
745 #undef _GLIBCXX_PARAMS_SHIFTED
746 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
747 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
748 #undef _GLIBCXX_COMMA_SHIFTED
750 #undef _GLIBCXX_PARAMS
751 #undef _GLIBCXX_TEMPLATE_ARGS
752 #undef _GLIBCXX_TEMPLATE_PARAMS
753 #undef _GLIBCXX_COMMA
754 #undef _GLIBCXX_NUM_ARGS
756 #define _GLIBCXX_NUM_ARGS 11
757 #define _GLIBCXX_COMMA ,
758 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11
759 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11
760 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11
761 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11
762 #define _GLIBCXX_COMMA_SHIFTED ,
763 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10
764 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10
765 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10
766 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10
767 #include <tr1/functional_iterate.h>
768 #undef _GLIBCXX_ARGS_SHIFTED
769 #undef _GLIBCXX_PARAMS_SHIFTED
770 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
771 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
772 #undef _GLIBCXX_COMMA_SHIFTED
774 #undef _GLIBCXX_PARAMS
775 #undef _GLIBCXX_TEMPLATE_ARGS
776 #undef _GLIBCXX_TEMPLATE_PARAMS
777 #undef _GLIBCXX_COMMA
778 #undef _GLIBCXX_NUM_ARGS
780 #define _GLIBCXX_NUM_ARGS 12
781 #define _GLIBCXX_COMMA ,
782 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12
783 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12
784 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12
785 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12
786 #define _GLIBCXX_COMMA_SHIFTED ,
787 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11
788 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11
789 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11
790 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11
791 #include <tr1/functional_iterate.h>
792 #undef _GLIBCXX_ARGS_SHIFTED
793 #undef _GLIBCXX_PARAMS_SHIFTED
794 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
795 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
796 #undef _GLIBCXX_COMMA_SHIFTED
798 #undef _GLIBCXX_PARAMS
799 #undef _GLIBCXX_TEMPLATE_ARGS
800 #undef _GLIBCXX_TEMPLATE_PARAMS
801 #undef _GLIBCXX_COMMA
802 #undef _GLIBCXX_NUM_ARGS
804 #define _GLIBCXX_NUM_ARGS 13
805 #define _GLIBCXX_COMMA ,
806 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12, typename _T13
807 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13
808 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12, _T13 __a13
809 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13
810 #define _GLIBCXX_COMMA_SHIFTED ,
811 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12
812 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12
813 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12
814 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12
815 #include <tr1/functional_iterate.h>
816 #undef _GLIBCXX_ARGS_SHIFTED
817 #undef _GLIBCXX_PARAMS_SHIFTED
818 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
819 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
820 #undef _GLIBCXX_COMMA_SHIFTED
822 #undef _GLIBCXX_PARAMS
823 #undef _GLIBCXX_TEMPLATE_ARGS
824 #undef _GLIBCXX_TEMPLATE_PARAMS
825 #undef _GLIBCXX_COMMA
826 #undef _GLIBCXX_NUM_ARGS
828 #define _GLIBCXX_NUM_ARGS 14
829 #define _GLIBCXX_COMMA ,
830 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12, typename _T13, typename _T14
831 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14
832 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12, _T13 __a13, _T14 __a14
833 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14
834 #define _GLIBCXX_COMMA_SHIFTED ,
835 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12, typename _T13
836 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13
837 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12, _T13 __a13
838 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13
839 #include <tr1/functional_iterate.h>
840 #undef _GLIBCXX_ARGS_SHIFTED
841 #undef _GLIBCXX_PARAMS_SHIFTED
842 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
843 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
844 #undef _GLIBCXX_COMMA_SHIFTED
846 #undef _GLIBCXX_PARAMS
847 #undef _GLIBCXX_TEMPLATE_ARGS
848 #undef _GLIBCXX_TEMPLATE_PARAMS
849 #undef _GLIBCXX_COMMA
850 #undef _GLIBCXX_NUM_ARGS
852 #define _GLIBCXX_NUM_ARGS 15
853 #define _GLIBCXX_COMMA ,
854 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12, typename _T13, typename _T14, typename _T15
855 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15
856 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12, _T13 __a13, _T14 __a14, _T15 __a15
857 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15
858 #define _GLIBCXX_COMMA_SHIFTED ,
859 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12, typename _T13, typename _T14
860 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14
861 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12, _T13 __a13, _T14 __a14
862 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14
863 #include <tr1/functional_iterate.h>
864 #undef _GLIBCXX_ARGS_SHIFTED
865 #undef _GLIBCXX_PARAMS_SHIFTED
866 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
867 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
868 #undef _GLIBCXX_COMMA_SHIFTED
870 #undef _GLIBCXX_PARAMS
871 #undef _GLIBCXX_TEMPLATE_ARGS
872 #undef _GLIBCXX_TEMPLATE_PARAMS
873 #undef _GLIBCXX_COMMA
874 #undef _GLIBCXX_NUM_ARGS
876 #define _GLIBCXX_NUM_ARGS 16
877 #define _GLIBCXX_COMMA ,
878 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12, typename _T13, typename _T14, typename _T15, typename _T16
879 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16
880 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12, _T13 __a13, _T14 __a14, _T15 __a15, _T16 __a16
881 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16
882 #define _GLIBCXX_COMMA_SHIFTED ,
883 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12, typename _T13, typename _T14, typename _T15
884 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15
885 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12, _T13 __a13, _T14 __a14, _T15 __a15
886 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15
887 #include <tr1/functional_iterate.h>
888 #undef _GLIBCXX_ARGS_SHIFTED
889 #undef _GLIBCXX_PARAMS_SHIFTED
890 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
891 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
892 #undef _GLIBCXX_COMMA_SHIFTED
894 #undef _GLIBCXX_PARAMS
895 #undef _GLIBCXX_TEMPLATE_ARGS
896 #undef _GLIBCXX_TEMPLATE_PARAMS
897 #undef _GLIBCXX_COMMA
898 #undef _GLIBCXX_NUM_ARGS
900 #define _GLIBCXX_NUM_ARGS 17
901 #define _GLIBCXX_COMMA ,
902 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12, typename _T13, typename _T14, typename _T15, typename _T16, typename _T17
903 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17
904 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12, _T13 __a13, _T14 __a14, _T15 __a15, _T16 __a16, _T17 __a17
905 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17
906 #define _GLIBCXX_COMMA_SHIFTED ,
907 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12, typename _T13, typename _T14, typename _T15, typename _T16
908 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16
909 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12, _T13 __a13, _T14 __a14, _T15 __a15, _T16 __a16
910 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16
911 #include <tr1/functional_iterate.h>
912 #undef _GLIBCXX_ARGS_SHIFTED
913 #undef _GLIBCXX_PARAMS_SHIFTED
914 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
915 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
916 #undef _GLIBCXX_COMMA_SHIFTED
918 #undef _GLIBCXX_PARAMS
919 #undef _GLIBCXX_TEMPLATE_ARGS
920 #undef _GLIBCXX_TEMPLATE_PARAMS
921 #undef _GLIBCXX_COMMA
922 #undef _GLIBCXX_NUM_ARGS
924 #define _GLIBCXX_NUM_ARGS 18
925 #define _GLIBCXX_COMMA ,
926 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12, typename _T13, typename _T14, typename _T15, typename _T16, typename _T17, typename _T18
927 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18
928 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12, _T13 __a13, _T14 __a14, _T15 __a15, _T16 __a16, _T17 __a17, _T18 __a18
929 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17, __a18
930 #define _GLIBCXX_COMMA_SHIFTED ,
931 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12, typename _T13, typename _T14, typename _T15, typename _T16, typename _T17
932 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17
933 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12, _T13 __a13, _T14 __a14, _T15 __a15, _T16 __a16, _T17 __a17
934 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17
935 #include <tr1/functional_iterate.h>
936 #undef _GLIBCXX_ARGS_SHIFTED
937 #undef _GLIBCXX_PARAMS_SHIFTED
938 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
939 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
940 #undef _GLIBCXX_COMMA_SHIFTED
942 #undef _GLIBCXX_PARAMS
943 #undef _GLIBCXX_TEMPLATE_ARGS
944 #undef _GLIBCXX_TEMPLATE_PARAMS
945 #undef _GLIBCXX_COMMA
946 #undef _GLIBCXX_NUM_ARGS
948 #define _GLIBCXX_NUM_ARGS 19
949 #define _GLIBCXX_COMMA ,
950 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12, typename _T13, typename _T14, typename _T15, typename _T16, typename _T17, typename _T18, typename _T19
951 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19
952 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12, _T13 __a13, _T14 __a14, _T15 __a15, _T16 __a16, _T17 __a17, _T18 __a18, _T19 __a19
953 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17, __a18, __a19
954 #define _GLIBCXX_COMMA_SHIFTED ,
955 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12, typename _T13, typename _T14, typename _T15, typename _T16, typename _T17, typename _T18
956 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18
957 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12, _T13 __a13, _T14 __a14, _T15 __a15, _T16 __a16, _T17 __a17, _T18 __a18
958 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17, __a18
959 #include <tr1/functional_iterate.h>
960 #undef _GLIBCXX_ARGS_SHIFTED
961 #undef _GLIBCXX_PARAMS_SHIFTED
962 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
963 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
964 #undef _GLIBCXX_COMMA_SHIFTED
966 #undef _GLIBCXX_PARAMS
967 #undef _GLIBCXX_TEMPLATE_ARGS
968 #undef _GLIBCXX_TEMPLATE_PARAMS
969 #undef _GLIBCXX_COMMA
970 #undef _GLIBCXX_NUM_ARGS
972 #define _GLIBCXX_NUM_ARGS 20
973 #define _GLIBCXX_COMMA ,
974 #define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12, typename _T13, typename _T14, typename _T15, typename _T16, typename _T17, typename _T18, typename _T19, typename _T20
975 #define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20
976 #define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12, _T13 __a13, _T14 __a14, _T15 __a15, _T16 __a16, _T17 __a17, _T18 __a18, _T19 __a19, _T20 __a20
977 #define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17, __a18, __a19, __a20
978 #define _GLIBCXX_COMMA_SHIFTED ,
979 #define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10, typename _T11, typename _T12, typename _T13, typename _T14, typename _T15, typename _T16, typename _T17, typename _T18, typename _T19
980 #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19
981 #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10, _T11 __a11, _T12 __a12, _T13 __a13, _T14 __a14, _T15 __a15, _T16 __a16, _T17 __a17, _T18 __a18, _T19 __a19
982 #define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17, __a18, __a19
983 #include <tr1/functional_iterate.h>
984 #undef _GLIBCXX_ARGS_SHIFTED
985 #undef _GLIBCXX_PARAMS_SHIFTED
986 #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
987 #undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED
988 #undef _GLIBCXX_COMMA_SHIFTED
990 #undef _GLIBCXX_PARAMS
991 #undef _GLIBCXX_TEMPLATE_ARGS
992 #undef _GLIBCXX_TEMPLATE_PARAMS
993 #undef _GLIBCXX_COMMA
994 #undef _GLIBCXX_NUM_ARGS
996 // [3.7.2.7] null pointer comparisons
999 * @brief Compares a polymorphic function object wrapper against 0
1000 * (the NULL pointer).
1001 * @returns @c true if the wrapper has no target, @c false otherwise
1003 * This function will not throw an exception.
1005 template<typename _Signature>
1007 operator==(const function<_Signature>& __f, _M_clear_type*)
1015 template<typename _Signature>
1017 operator==(_M_clear_type*, const function<_Signature>& __f)
1023 * @brief Compares a polymorphic function object wrapper against 0
1024 * (the NULL pointer).
1025 * @returns @c false if the wrapper has no target, @c true otherwise
1027 * This function will not throw an exception.
1029 template<typename _Signature>
1031 operator!=(const function<_Signature>& __f, _M_clear_type*)
1039 template<typename _Signature>
1041 operator!=(_M_clear_type*, const function<_Signature>& __f)
1046 // [3.7.2.8] specialized algorithms
1049 * @brief Swap the targets of two polymorphic function object wrappers.
1051 * This function will not throw an exception.
1053 template<typename _Signature>
1055 swap(function<_Signature>& __x, function<_Signature>& __y)
1061 // Definition of default hash function std::tr1::hash<>. The types for
1062 // which std::tr1::hash<T> is defined is in clause 6.3.3. of the PDTR.
1064 template <typename T> struct hash;
1066 #define tr1_hashtable_define_trivial_hash(T) \
1067 template <> struct hash<T> { \
1068 std::size_t operator()(T val) const { return static_cast<std::size_t>(val); } \
1071 tr1_hashtable_define_trivial_hash(bool);
1072 tr1_hashtable_define_trivial_hash(char);
1073 tr1_hashtable_define_trivial_hash(signed char);
1074 tr1_hashtable_define_trivial_hash(unsigned char);
1075 tr1_hashtable_define_trivial_hash(wchar_t);
1076 tr1_hashtable_define_trivial_hash(short);
1077 tr1_hashtable_define_trivial_hash(int);
1078 tr1_hashtable_define_trivial_hash(long);
1079 tr1_hashtable_define_trivial_hash(unsigned short);
1080 tr1_hashtable_define_trivial_hash(unsigned int);
1081 tr1_hashtable_define_trivial_hash(unsigned long);
1083 tr1_hashtable_define_trivial_hash(float);
1084 tr1_hashtable_define_trivial_hash(double);
1085 tr1_hashtable_define_trivial_hash(long double);
1087 #undef tr1_hashtable_define_trivial_hash
1089 template <typename T>
1091 std::size_t operator()(T* p) const {
1092 return reinterpret_cast<std::size_t>(p);
1096 // ??? We can probably find a better hash function than this (i.e. one
1097 // that vectorizes better and that produces a more uniform distribution).
1099 // XXX String hash probably shouldn't be an inline member function,
1100 // since it's nontrivial. Once we have the framework for TR1 .cc
1101 // files, this should go in one.
1104 struct hash<std::string>
1106 std::size_t operator()(const std::string& s) const
1108 std::size_t result = 0;
1109 for (std::string::const_iterator i = s.begin(); i != s.end(); ++i)
1110 result = (result * 131) + *i;
1115 #ifdef _GLIBCXX_USE_WCHAR_T
1117 struct hash<std::wstring>
1119 std::size_t operator()(const std::wstring& s) const
1121 std::size_t result = 0;
1122 for (std::wstring::const_iterator i = s.begin(); i != s.end(); ++i)
1123 result = (result * 131) + *i;