diff options
author | dgregor <dgregor@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-03-02 12:56:28 +0000 |
---|---|---|
committer | dgregor <dgregor@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-03-02 12:56:28 +0000 |
commit | 0875e2d5acec793f2f9374650c497c58497e0230 (patch) | |
tree | 5e2e64883bf5fcdc589a92880840a165ed314e0e /libstdc++-v3 | |
parent | bb4c7a44377ffbc0967d80916cae0cd8dc3b2f85 (diff) | |
download | gcc-0875e2d5acec793f2f9374650c497c58497e0230.tar.gz |
2005-03-02 Douglas Gregor <doug.gregor@gmail.com>
* include/tr1/functional (_Has_result_type): Cleanup.
(_Result_of_impl): Handle member data pointers correctly.
(reference_wrapper): Support invocation.
Move repetition code into new file include/tr1/repeat.h.
* include/tr1/functional_iterate.h (reference_wrapper): Support
invocation. Cleanup long lines.
* include/tr1/ref_wrap_iterate.h (reference_wrapper): Declare
invocation operators.
* include/tr1/repeat.h: Code repetition header.
* include/Makefile.am: Add ref_wrap_iterate.h, repeat.h
* include/Makefile.in: Add ref_wrap_iterate.h, repeat.h
* testsuite/tr1/3_function_objects/reference_wrapper/invoke.cc:
New test of reference_wrapper invocation.
* testsuite/tr1/3_function_objects/reference_wrapper/typedefs.cc:
New test of reference_wrapper typedefs and base classes.
* testsuite/tr1/3_function_objects/result_of.cc: Trivial cleanup
(e-mail address).
2005-03-02 Douglas Gregor <doug.gregor@gmail.com>
* include/tr1/function (result_of): New class template.
* include/tr1/functional/iterator.h: Implementation of TR1
result_of.
* testsuite/tr1/3_function_objects/result_of.cc: New test
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@95778 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 27 | ||||
-rw-r--r-- | libstdc++-v3/include/Makefile.am | 2 | ||||
-rw-r--r-- | libstdc++-v3/include/Makefile.in | 2 | ||||
-rw-r--r-- | libstdc++-v3/include/tr1/functional | 807 | ||||
-rw-r--r-- | libstdc++-v3/include/tr1/functional_iterate.h | 149 | ||||
-rw-r--r-- | libstdc++-v3/include/tr1/ref_wrap_iterate.h | 44 | ||||
-rw-r--r-- | libstdc++-v3/include/tr1/repeat.h | 585 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/invoke.cc | 103 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/typedefs.cc | 89 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/tr1/3_function_objects/result_of.cc | 75 |
10 files changed, 1371 insertions, 512 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 8226cbcddea..8f758db901d 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,30 @@ +2005-03-02 Douglas Gregor <doug.gregor@gmail.com> + + * include/tr1/functional (_Has_result_type): Cleanup. + (_Result_of_impl): Handle member data pointers correctly. + (reference_wrapper): Support invocation. + Move repetition code into new file include/tr1/repeat.h. + * include/tr1/functional_iterate.h (reference_wrapper): Support + invocation. Cleanup long lines. + * include/tr1/ref_wrap_iterate.h (reference_wrapper): Declare + invocation operators. + * include/tr1/repeat.h: Code repetition header. + * include/Makefile.am: Add ref_wrap_iterate.h, repeat.h + * include/Makefile.in: Add ref_wrap_iterate.h, repeat.h + * testsuite/tr1/3_function_objects/reference_wrapper/invoke.cc: + New test of reference_wrapper invocation. + * testsuite/tr1/3_function_objects/reference_wrapper/typedefs.cc: + New test of reference_wrapper typedefs and base classes. + * testsuite/tr1/3_function_objects/result_of.cc: Trivial cleanup + (e-mail address). + +2005-03-02 Douglas Gregor <doug.gregor@gmail.com> + + * include/tr1/function (result_of): New class template. + * include/tr1/functional/iterator.h: Implementation of TR1 + result_of. + * testsuite/tr1/3_function_objects/result_of.cc: New test + 2005-03-01 Vladimir Merzliakov <wanderer@rsu.ru> * testsuite/26_numerics/cmath/c99_classification_macros_c.cc: Tweak. diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index 24da787ece4..2b260b2ac6d 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -231,6 +231,8 @@ tr1_headers = \ ${tr1_srcdir}/functional \ ${tr1_srcdir}/functional_iterate.h \ ${tr1_srcdir}/memory \ + ${tr1_srcdir}/ref_wrap_iterate.h \ + ${tr1_srcdir}/repeat.h \ ${tr1_srcdir}/tuple \ ${tr1_srcdir}/utility \ ${tr1_srcdir}/type_traits \ diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index b7d8a2acef6..6fbb9433714 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -447,6 +447,8 @@ tr1_headers = \ ${tr1_srcdir}/functional \ ${tr1_srcdir}/functional_iterate.h \ ${tr1_srcdir}/memory \ + ${tr1_srcdir}/ref_wrap_iterate.h \ + ${tr1_srcdir}/repeat.h \ ${tr1_srcdir}/tuple \ ${tr1_srcdir}/utility \ ${tr1_srcdir}/type_traits \ diff --git a/libstdc++-v3/include/tr1/functional b/libstdc++-v3/include/tr1/functional index 1a958c35391..30a79871ac8 100644 --- a/libstdc++-v3/include/tr1/functional +++ b/libstdc++-v3/include/tr1/functional @@ -45,9 +45,299 @@ namespace std { namespace tr1 { + template<typename _MemberPointer> + class _Mem_fn; + + /** + * @if maint + * Actual implementation of _Has_result_type, which uses SFINAE to + * determine if the type _Tp has a publicly-accessible member type + * result_type. + * @endif + */ + template<typename _Tp> + class _Has_result_type_helper : __sfinae_types + { + template<typename _Up> + struct _Wrap_type + { }; + + template<typename _Up> + static __one __test(_Wrap_type<typename _Up::result_type>*); + + template<typename _Up> + static __two __test(...); + + public: + static const bool value = sizeof(__test<_Tp>(0)) == 1; + }; + + template<typename _Tp> + struct _Has_result_type + : integral_constant< + bool, + _Has_result_type_helper<typename remove_cv<_Tp>::type>::value> + { }; + + /** + * @if maint + * If we have found a result_type, extract it. + * @endif + */ + template<bool _Has_result_type, typename _Functor> + struct _Maybe_get_result_type + { }; + + template<typename _Functor> + struct _Maybe_get_result_type<true, _Functor> + { + typedef typename _Functor::result_type result_type; + }; + + /** + * @if maint + * Base class for any function object that has a weak result type, as + * defined in 3.3/3 of TR1. + * @endif + */ + template<typename _Functor> + struct _Weak_result_type_impl + : _Maybe_get_result_type<_Has_result_type<_Functor>::value, _Functor> + { + }; + + /** + * @if maint + * Strip top-level cv-qualifiers from the function object and let + * _Weak_result_type_impl perform the real work. + * @endif + */ + template<typename _Functor> + struct _Weak_result_type + : _Weak_result_type_impl<typename remove_cv<_Functor>::type> + { + }; + + template<typename _Signature> + class result_of; + + /** + * @if maint + * Actual implementation of result_of. When _Has_result_type is + * true, gets its result from _Weak_result_type. Otherwise, uses + * the function object's member template result to extract the + * result type. + * @endif + */ + template<bool _Has_result_type, typename _Signature> + struct _Result_of_impl; + + // Handle member data pointers using _Mem_fn's logic + template<typename _Res, typename _Class, typename _T1> + struct _Result_of_impl<false, _Res _Class::*(_T1)> + { + typedef typename _Mem_fn<_Res _Class::*> + ::template _Result_type<_T1>::type type; + }; + + /** + * @if maint + * Determines if the type _Tp derives from unary_function. + * @endif + */ + template<typename _Tp> + struct _Derives_from_unary_function : __sfinae_types + { + private: + template<typename _T1, typename _Res> + static __one __test(const volatile unary_function<_T1, _Res>*); + + // It's tempting to change "..." to const volatile void*, but + // that fails when _Tp is a function type. + static __two __test(...); + + public: + static const bool value = sizeof(__test((_Tp*)0)) == 1; + }; + + /** + * @if maint + * Determines if the type _Tp derives from binary_function. + * @endif + */ + template<typename _Tp> + struct _Derives_from_binary_function : __sfinae_types + { + private: + template<typename _T1, typename _T2, typename _Res> + static __one __test(const volatile binary_function<_T1, _T2, _Res>*); + + // It's tempting to change "..." to const volatile void*, but + // that fails when _Tp is a function type. + static __two __test(...); + + public: + static const bool value = sizeof(__test((_Tp*)0)) == 1; + }; + + /** + * @if maint + * Turns a function type into a function pointer type + * @endif + */ + template<typename _Tp, bool _IsFunctionType = is_function<_Tp>::value> + struct _Function_to_function_pointer + { + typedef _Tp type; + }; + + template<typename _Tp> + struct _Function_to_function_pointer<_Tp, true> + { + typedef _Tp* type; + }; + + /** + * @if maint + * Knowing which of unary_function and binary_function _Tp derives + * from, derives from the same and ensures that reference_wrapper + * will have a weak result type. See cases below. + * @endif + */ + template<bool _Unary, bool _Binary, typename _Tp> + struct _Reference_wrapper_base_impl; + + // Not a unary_function or binary_function, so try a weak result type + template<typename _Tp> + struct _Reference_wrapper_base_impl<false, false, _Tp> + : _Weak_result_type<_Tp> + { }; + + // unary_function but not binary_function + template<typename _Tp> + struct _Reference_wrapper_base_impl<true, false, _Tp> + : unary_function<typename _Tp::argument_type, + typename _Tp::result_type> + { }; + + // binary_function but not unary_function + template<typename _Tp> + struct _Reference_wrapper_base_impl<false, true, _Tp> + : binary_function<typename _Tp::first_argument_type, + typename _Tp::second_argument_type, + typename _Tp::result_type> + { }; + + // both unary_function and binary_function. import result_type to + // avoid conflicts. + template<typename _Tp> + struct _Reference_wrapper_base_impl<true, true, _Tp> + : unary_function<typename _Tp::argument_type, + typename _Tp::result_type>, + binary_function<typename _Tp::first_argument_type, + typename _Tp::second_argument_type, + typename _Tp::result_type> + { + typedef typename _Tp::result_type result_type; + }; + + /** + * @if maint + * Derives from unary_function or binary_function when it + * can. Specializations handle all of the easy cases. The primary + * template determines what to do with a class type, which may + * derive from both unary_function and binary_function. + * @endif + */ + template<typename _Tp> + struct _Reference_wrapper_base + : _Reference_wrapper_base_impl< + _Derives_from_unary_function<_Tp>::value, + _Derives_from_binary_function<_Tp>::value, + _Tp> + { }; + + // - a function type (unary) + template<typename _Res, typename _T1> + struct _Reference_wrapper_base<_Res(_T1)> + : unary_function<_T1, _Res> + { }; + + // - a function type (binary) + template<typename _Res, typename _T1, typename _T2> + struct _Reference_wrapper_base<_Res(_T1, _T2)> + : binary_function<_T1, _T2, _Res> + { }; + + // - a function pointer type (unary) + template<typename _Res, typename _T1> + struct _Reference_wrapper_base<_Res(*)(_T1)> + : unary_function<_T1, _Res> + { }; + + // - a function pointer type (binary) + template<typename _Res, typename _T1, typename _T2> + struct _Reference_wrapper_base<_Res(*)(_T1, _T2)> + : binary_function<_T1, _T2, _Res> + { }; + + // - a pointer to member function type (unary, no qualifiers) + template<typename _Res, typename _T1> + struct _Reference_wrapper_base<_Res (_T1::*)()> + : unary_function<_T1*, _Res> + { }; + + // - a pointer to member function type (binary, no qualifiers) + template<typename _Res, typename _T1, typename _T2> + struct _Reference_wrapper_base<_Res (_T1::*)(_T2)> + : binary_function<_T1*, _T2, _Res> + { }; + + // - a pointer to member function type (unary, const) + template<typename _Res, typename _T1> + struct _Reference_wrapper_base<_Res (_T1::*)() const> + : unary_function<const _T1*, _Res> + { }; + + // - a pointer to member function type (binary, const) + template<typename _Res, typename _T1, typename _T2> + struct _Reference_wrapper_base<_Res (_T1::*)(_T2) const> + : binary_function<const _T1*, _T2, _Res> + { }; + + // - a pointer to member function type (unary, volatile) + template<typename _Res, typename _T1> + struct _Reference_wrapper_base<_Res (_T1::*)() volatile> + : unary_function<volatile _T1*, _Res> + { }; + + // - a pointer to member function type (binary, volatile) + template<typename _Res, typename _T1, typename _T2> + struct _Reference_wrapper_base<_Res (_T1::*)(_T2) volatile> + : binary_function<volatile _T1*, _T2, _Res> + { }; + + // - a pointer to member function type (unary, const volatile) + template<typename _Res, typename _T1> + struct _Reference_wrapper_base<_Res (_T1::*)() const volatile> + : unary_function<const volatile _T1*, _Res> + { }; + + // - a pointer to member function type (binary, const volatile) + template<typename _Res, typename _T1, typename _T2> + struct _Reference_wrapper_base<_Res (_T1::*)(_T2) const volatile> + : binary_function<const volatile _T1*, _T2, _Res> + { }; + template<typename _Tp> class reference_wrapper + : public _Reference_wrapper_base<typename remove_cv<_Tp>::type> { + // If _Tp is a function type, we can't form result_of<_Tp(...)>, + // so turn it into a function pointer type. + typedef typename _Function_to_function_pointer<_Tp>::type + _M_func_type; + _Tp* _M_data; public: typedef _Tp type; @@ -71,8 +361,13 @@ namespace tr1 _Tp& get() const { return *_M_data; } + +#define _GLIBCXX_REPEAT_HEADER <tr1/ref_wrap_iterate.h> +#include <tr1/repeat.h> +#undef _GLIBCXX_REPEAT_HEADER }; + // Denotes a reference should be taken to a variable. template<typename _Tp> reference_wrapper<_Tp> @@ -93,9 +388,6 @@ namespace tr1 reference_wrapper<const _Tp> cref(reference_wrapper<_Tp> __t) { return cref(__t.get()); } - template<typename _MemberPointer> - class _Mem_fn; - template<typename _Tp, bool> struct _Mem_fn_const_or_non { @@ -151,6 +443,7 @@ namespace tr1 template<typename _Tp> static __sfinae_types::__two __check_const(_Tp&, const volatile void*); + public: template<typename _Tp> struct _Result_type : _Mem_fn_const_or_non< @@ -159,7 +452,6 @@ namespace tr1 == sizeof(__check_const<_Tp>(__get_ref<_Tp>(), (_Tp*)0)))> { }; - public: explicit _Mem_fn(_Res _Class::*__pm) : __pm(__pm) { } // Handle objects @@ -489,510 +781,6 @@ namespace tr1 _Manager_type _M_manager; }; -#define _GLIBCXX_NUM_ARGS 0 -#define _GLIBCXX_COMMA -#define _GLIBCXX_TEMPLATE_PARAMS -#define _GLIBCXX_TEMPLATE_ARGS -#define _GLIBCXX_PARAMS -#define _GLIBCXX_ARGS -#define _GLIBCXX_COMMA_SHIFTED -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#define _GLIBCXX_PARAMS_SHIFTED -#define _GLIBCXX_ARGS_SHIFTED -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 1 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1 -#define _GLIBCXX_TEMPLATE_ARGS _T1 -#define _GLIBCXX_PARAMS _T1 __a1 -#define _GLIBCXX_ARGS __a1 -#define _GLIBCXX_COMMA_SHIFTED -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#define _GLIBCXX_PARAMS_SHIFTED -#define _GLIBCXX_ARGS_SHIFTED -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 2 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2 -#define _GLIBCXX_ARGS __a1, __a2 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1 -#define _GLIBCXX_ARGS_SHIFTED __a1 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 3 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3 -#define _GLIBCXX_ARGS __a1, __a2, __a3 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 4 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 5 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 6 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 7 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 8 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 9 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 10 -#define _GLIBCXX_COMMA , -#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10 -#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10 -#define _GLIBCXX_COMMA_SHIFTED , -#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 11 -#define _GLIBCXX_COMMA , -#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 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11 -#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 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11 -#define _GLIBCXX_COMMA_SHIFTED , -#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 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10 -#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 12 -#define _GLIBCXX_COMMA , -#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 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12 -#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 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12 -#define _GLIBCXX_COMMA_SHIFTED , -#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 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11 -#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 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 13 -#define _GLIBCXX_COMMA , -#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 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13 -#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 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13 -#define _GLIBCXX_COMMA_SHIFTED , -#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 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12 -#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 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 14 -#define _GLIBCXX_COMMA , -#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 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14 -#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 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14 -#define _GLIBCXX_COMMA_SHIFTED , -#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 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13 -#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 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 15 -#define _GLIBCXX_COMMA , -#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 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15 -#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 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15 -#define _GLIBCXX_COMMA_SHIFTED , -#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 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14 -#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 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 16 -#define _GLIBCXX_COMMA , -#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 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16 -#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 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16 -#define _GLIBCXX_COMMA_SHIFTED , -#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 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15 -#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 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 17 -#define _GLIBCXX_COMMA , -#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 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17 -#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 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17 -#define _GLIBCXX_COMMA_SHIFTED , -#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 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16 -#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 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 18 -#define _GLIBCXX_COMMA , -#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 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18 -#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 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17, __a18 -#define _GLIBCXX_COMMA_SHIFTED , -#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 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17 -#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 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 19 -#define _GLIBCXX_COMMA , -#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 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19 -#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 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17, __a18, __a19 -#define _GLIBCXX_COMMA_SHIFTED , -#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 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18 -#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 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17, __a18 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - -#define _GLIBCXX_NUM_ARGS 20 -#define _GLIBCXX_COMMA , -#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 -#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20 -#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 -#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17, __a18, __a19, __a20 -#define _GLIBCXX_COMMA_SHIFTED , -#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 -#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19 -#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 -#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17, __a18, __a19 -#include <tr1/functional_iterate.h> -#undef _GLIBCXX_ARGS_SHIFTED -#undef _GLIBCXX_PARAMS_SHIFTED -#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED -#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED -#undef _GLIBCXX_COMMA_SHIFTED -#undef _GLIBCXX_ARGS -#undef _GLIBCXX_PARAMS -#undef _GLIBCXX_TEMPLATE_ARGS -#undef _GLIBCXX_TEMPLATE_PARAMS -#undef _GLIBCXX_COMMA -#undef _GLIBCXX_NUM_ARGS - // [3.7.2.7] null pointer comparisons /** @@ -1057,6 +845,9 @@ namespace tr1 __x.swap(__y); } +#define _GLIBCXX_REPEAT_HEADER <tr1/functional_iterate.h> +#include <tr1/repeat.h> +#undef _GLIBCXX_REPEAT_HEADER // Definition of default hash function std::tr1::hash<>. The types for // which std::tr1::hash<T> is defined is in clause 6.3.3. of the PDTR. diff --git a/libstdc++-v3/include/tr1/functional_iterate.h b/libstdc++-v3/include/tr1/functional_iterate.h index 8f94d8ecdc9..97f4d248794 100644 --- a/libstdc++-v3/include/tr1/functional_iterate.h +++ b/libstdc++-v3/include/tr1/functional_iterate.h @@ -1,7 +1,7 @@ // TR1 functional -*- C++ -*- // Copyright (C) 2005 Free Software Foundation, Inc. -// Writtten by Douglas Gregor <dgregor@cs.indiana.edu> +// Written by Douglas Gregor <doug.gregor -at- gmail.com> // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -33,6 +33,145 @@ * You should not attempt to use it directly. */ +template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> + struct _Weak_result_type_impl<_Res(_GLIBCXX_TEMPLATE_ARGS)> + { + typedef _Res result_type; + }; + +template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> + struct _Weak_result_type_impl<_Res (&)(_GLIBCXX_TEMPLATE_ARGS)> + { + typedef _Res result_type; + }; + +template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> + struct _Weak_result_type_impl<_Res (*)(_GLIBCXX_TEMPLATE_ARGS)> + { + typedef _Res result_type; + }; + +#if _GLIBCXX_NUM_ARGS > 0 +template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED + _GLIBCXX_TEMPLATE_PARAMS_SHIFTED> + struct _Weak_result_type_impl< + _Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED)> + { + typedef _Res result_type; + }; + +template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED + _GLIBCXX_TEMPLATE_PARAMS_SHIFTED> + struct _Weak_result_type_impl< + _Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) const> + { + typedef _Res result_type; + }; + +template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED + _GLIBCXX_TEMPLATE_PARAMS_SHIFTED> + struct _Weak_result_type_impl< + _Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) volatile> + { + typedef _Res result_type; + }; + +template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED + _GLIBCXX_TEMPLATE_PARAMS_SHIFTED> + struct _Weak_result_type_impl< + _Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) const volatile> + { + typedef _Res result_type; + }; +#endif + +template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> + class result_of<_Functor(_GLIBCXX_TEMPLATE_ARGS)> + : public _Result_of_impl< + _Has_result_type<_Weak_result_type<_Functor> >::value, + _Functor(_GLIBCXX_TEMPLATE_ARGS)> + { }; + +template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> + struct _Result_of_impl<true, _Functor(_GLIBCXX_TEMPLATE_ARGS)> + { + typedef typename _Weak_result_type<_Functor>::result_type type; + }; + +template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> + struct _Result_of_impl<false, _Functor(_GLIBCXX_TEMPLATE_ARGS)> + { +#if _GLIBCXX_NUM_ARGS > 0 + typedef typename _Functor + ::template result<_Functor(_GLIBCXX_TEMPLATE_ARGS)>::type type; +#else + typedef void type; +#endif + }; + +/** + * @if maint + * Invoke a function object, which may be either a member pointer or a + * function object. The first parameter will tell which. + * @endif + */ +template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> + inline + typename __enable_if< + typename result_of<_Functor(_GLIBCXX_TEMPLATE_ARGS)>::type, + (!is_member_pointer<_Functor>::value + && !is_function<_Functor>::value + && !is_function<typename remove_pointer<_Functor>::type>::value) + >::__type + __invoke(_Functor& __f _GLIBCXX_COMMA _GLIBCXX_REF_PARAMS) + { + return __f(_GLIBCXX_ARGS); + } + +#if _GLIBCXX_NUM_ARGS > 0 +template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> + inline + typename __enable_if< + typename result_of<_Functor(_GLIBCXX_TEMPLATE_ARGS)>::type, + (is_member_pointer<_Functor>::value + && !is_function<_Functor>::value + && !is_function<typename remove_pointer<_Functor>::type>::value) + >::__type + __invoke(_Functor& __f _GLIBCXX_COMMA _GLIBCXX_REF_PARAMS) + { + return mem_fn(__f)(_GLIBCXX_ARGS); + } +#endif + +// To pick up function references (that will become function pointers) +template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> + inline + typename __enable_if< + typename result_of<_Functor(_GLIBCXX_TEMPLATE_ARGS)>::type, + (is_pointer<_Functor>::value + && is_function<typename remove_pointer<_Functor>::type>::value) + >::__type + __invoke(_Functor __f _GLIBCXX_COMMA _GLIBCXX_REF_PARAMS) + { + return __f(_GLIBCXX_ARGS); + } + +/** + * @if maint + * Implementation of reference_wrapper::operator() + * @endif +*/ +#if _GLIBCXX_NUM_ARGS > 0 +template<typename _Tp> +template<_GLIBCXX_TEMPLATE_PARAMS> + typename result_of< + typename reference_wrapper<_Tp>::_M_func_type(_GLIBCXX_TEMPLATE_ARGS)>::type + reference_wrapper<_Tp>::operator()(_GLIBCXX_REF_PARAMS) const + { + return __invoke(get(), _GLIBCXX_ARGS); + } +#endif + #if _GLIBCXX_NUM_ARGS > 0 template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED _GLIBCXX_TEMPLATE_PARAMS_SHIFTED> @@ -197,7 +336,7 @@ template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED template<typename _Res, typename _Class _GLIBCXX_COMMA_SHIFTED _GLIBCXX_TEMPLATE_PARAMS_SHIFTED> - class _Mem_fn<_Res (_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) const volatile> + class _Mem_fn<_Res(_Class::*)(_GLIBCXX_TEMPLATE_ARGS_SHIFTED) const volatile> #if _GLIBCXX_NUM_ARGS == 1 : public unary_function<const volatile _Class*, _Res> #elif _GLIBCXX_NUM_ARGS == 2 @@ -600,7 +739,8 @@ class function<_Res(_GLIBCXX_TEMPLATE_ARGS)> template<typename _Function> void operator!=(const function<_Function>&) const; - typedef _Res (*_Invoker_type)(const _Any_data& _GLIBCXX_COMMA _GLIBCXX_PARAMS); + typedef _Res (*_Invoker_type)(const _Any_data& _GLIBCXX_COMMA + _GLIBCXX_PARAMS); _Invoker_type _M_invoker; }; @@ -632,7 +772,8 @@ template<typename _Functor> } template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS> - _Res function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::operator()(_GLIBCXX_PARAMS) const + _Res + function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::operator()(_GLIBCXX_PARAMS) const { if (_M_empty()) { diff --git a/libstdc++-v3/include/tr1/ref_wrap_iterate.h b/libstdc++-v3/include/tr1/ref_wrap_iterate.h new file mode 100644 index 00000000000..430109f04f6 --- /dev/null +++ b/libstdc++-v3/include/tr1/ref_wrap_iterate.h @@ -0,0 +1,44 @@ +// TR1 reference_wrapper -*- C++ -*- + +// Copyright (C) 2005 Free Software Foundation, Inc. +// Written by Douglas Gregor <doug.gregor -at- gmail.com> +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +/** @file ref_wrap_iterate.h + * This is an internal header file, included by other library headers. + * You should not attempt to use it directly. + */ + +#if _GLIBCXX_NUM_ARGS > 0 +template<_GLIBCXX_TEMPLATE_PARAMS> + typename result_of<_M_func_type(_GLIBCXX_TEMPLATE_ARGS)>::type + operator()(_GLIBCXX_REF_PARAMS) const; +#else +typename result_of<_M_func_type()>::type +operator()() const +{ return (*get())(); } +#endif diff --git a/libstdc++-v3/include/tr1/repeat.h b/libstdc++-v3/include/tr1/repeat.h new file mode 100644 index 00000000000..d87aeb9b14f --- /dev/null +++ b/libstdc++-v3/include/tr1/repeat.h @@ -0,0 +1,585 @@ +// TR1 code repetition -*- C++ -*- + +// Copyright (C) 2005 Free Software Foundation, Inc. +// Written by Douglas Gregor <doug.gregor -at- gmail.com> +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +/** @file repeat.h + * This is an internal header file, included by other library headers. + * You should not attempt to use it directly. + */ + +#ifndef _GLIBCXX_REPEAT_HEADER +# error Internal error: _GLIBCXX_REPEAT_HEADER must be set +#endif /* _GLIBCXX_REPEAT_HEADER */ + +#define _GLIBCXX_NUM_ARGS 0 +#define _GLIBCXX_COMMA +#define _GLIBCXX_TEMPLATE_PARAMS +#define _GLIBCXX_TEMPLATE_ARGS +#define _GLIBCXX_PARAMS +#define _GLIBCXX_REF_PARAMS +#define _GLIBCXX_ARGS +#define _GLIBCXX_COMMA_SHIFTED +#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#define _GLIBCXX_PARAMS_SHIFTED +#define _GLIBCXX_ARGS_SHIFTED +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 1 +#define _GLIBCXX_COMMA , +#define _GLIBCXX_TEMPLATE_PARAMS typename _T1 +#define _GLIBCXX_TEMPLATE_ARGS _T1 +#define _GLIBCXX_PARAMS _T1 __a1 +#define _GLIBCXX_REF_PARAMS _T1& __a1 +#define _GLIBCXX_ARGS __a1 +#define _GLIBCXX_COMMA_SHIFTED +#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#define _GLIBCXX_PARAMS_SHIFTED +#define _GLIBCXX_ARGS_SHIFTED +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 2 +#define _GLIBCXX_COMMA , +#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2 +#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2 +#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2 +#define _GLIBCXX_ARGS __a1, __a2 +#define _GLIBCXX_COMMA_SHIFTED , +#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1 +#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1 +#define _GLIBCXX_ARGS_SHIFTED __a1 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 3 +#define _GLIBCXX_COMMA , +#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3 +#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3 +#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3 +#define _GLIBCXX_ARGS __a1, __a2, __a3 +#define _GLIBCXX_COMMA_SHIFTED , +#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2 +#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 4 +#define _GLIBCXX_COMMA , +#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4 +#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4 +#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4 +#define _GLIBCXX_COMMA_SHIFTED , +#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3 +#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 5 +#define _GLIBCXX_COMMA , +#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5 +#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5 +#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5 +#define _GLIBCXX_COMMA_SHIFTED , +#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4 +#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 6 +#define _GLIBCXX_COMMA , +#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6 +#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6 +#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5, _T6& __a6 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6 +#define _GLIBCXX_COMMA_SHIFTED , +#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5 +#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 7 +#define _GLIBCXX_COMMA , +#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7 +#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7 +#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5, _T6& __a6, _T7& __a7 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7 +#define _GLIBCXX_COMMA_SHIFTED , +#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6 +#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 8 +#define _GLIBCXX_COMMA , +#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8 +#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8 +#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5, _T6& __a6, _T7& __a7, _T8& __a8 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8 +#define _GLIBCXX_COMMA_SHIFTED , +#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7 +#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 9 +#define _GLIBCXX_COMMA , +#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 +#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9 +#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5, _T6& __a6, _T7& __a7, _T8& __a8, _T9& __a9 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9 +#define _GLIBCXX_COMMA_SHIFTED , +#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8 +#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 10 +#define _GLIBCXX_COMMA , +#define _GLIBCXX_TEMPLATE_PARAMS typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9, typename _T10 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10 +#define _GLIBCXX_PARAMS _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10 +#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5, _T6& __a6, _T7& __a7, _T8& __a8, _T9& __a9, _T10& __a10 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10 +#define _GLIBCXX_COMMA_SHIFTED , +#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED typename _T1, typename _T2, typename _T3, typename _T4, typename _T5, typename _T6, typename _T7, typename _T8, typename _T9 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 +#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 11 +#define _GLIBCXX_COMMA , +#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 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11 +#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 +#define _GLIBCXX_REF_PARAMS _T1& __a1, _T2& __a2, _T3& __a3, _T4& __a4, _T5& __a5, _T6& __a6, _T7& __a7, _T8& __a8, _T9& __a9, _T10& __a10, _T11& __a11 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11 +#define _GLIBCXX_COMMA_SHIFTED , +#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 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10 +#define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2, _T3 __a3, _T4 __a4, _T5 __a5, _T6 __a6, _T7 __a7, _T8 __a8, _T9 __a9, _T10 __a10 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 12 +#define _GLIBCXX_COMMA , +#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 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12 +#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 +#define _GLIBCXX_REF_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 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12 +#define _GLIBCXX_COMMA_SHIFTED , +#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 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11 +#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 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 13 +#define _GLIBCXX_COMMA , +#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 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13 +#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 +#define _GLIBCXX_REF_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 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13 +#define _GLIBCXX_COMMA_SHIFTED , +#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 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12 +#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 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 14 +#define _GLIBCXX_COMMA , +#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 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14 +#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 +#define _GLIBCXX_REF_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 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14 +#define _GLIBCXX_COMMA_SHIFTED , +#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 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13 +#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 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 15 +#define _GLIBCXX_COMMA , +#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 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15 +#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 +#define _GLIBCXX_REF_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 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15 +#define _GLIBCXX_COMMA_SHIFTED , +#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 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14 +#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 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 16 +#define _GLIBCXX_COMMA , +#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 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16 +#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 +#define _GLIBCXX_REF_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 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16 +#define _GLIBCXX_COMMA_SHIFTED , +#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 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15 +#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 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 17 +#define _GLIBCXX_COMMA , +#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 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17 +#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 +#define _GLIBCXX_REF_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 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17 +#define _GLIBCXX_COMMA_SHIFTED , +#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 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16 +#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 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 18 +#define _GLIBCXX_COMMA , +#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 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18 +#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 +#define _GLIBCXX_REF_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 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17, __a18 +#define _GLIBCXX_COMMA_SHIFTED , +#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 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17 +#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 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 19 +#define _GLIBCXX_COMMA , +#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 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19 +#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 +#define _GLIBCXX_REF_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 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17, __a18, __a19 +#define _GLIBCXX_COMMA_SHIFTED , +#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 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18 +#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 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17, __a18 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + +#define _GLIBCXX_NUM_ARGS 20 +#define _GLIBCXX_COMMA , +#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 +#define _GLIBCXX_TEMPLATE_ARGS _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20 +#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 +#define _GLIBCXX_REF_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 +#define _GLIBCXX_ARGS __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17, __a18, __a19, __a20 +#define _GLIBCXX_COMMA_SHIFTED , +#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 +#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19 +#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 +#define _GLIBCXX_ARGS_SHIFTED __a1, __a2, __a3, __a4, __a5, __a6, __a7, __a8, __a9, __a10, __a11, __a12, __a13, __a14, __a15, __a16, __a17, __a18, __a19 +#include _GLIBCXX_REPEAT_HEADER +#undef _GLIBCXX_ARGS_SHIFTED +#undef _GLIBCXX_PARAMS_SHIFTED +#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED +#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED +#undef _GLIBCXX_COMMA_SHIFTED +#undef _GLIBCXX_ARGS +#undef _GLIBCXX_REF_PARAMS +#undef _GLIBCXX_PARAMS +#undef _GLIBCXX_TEMPLATE_ARGS +#undef _GLIBCXX_TEMPLATE_PARAMS +#undef _GLIBCXX_COMMA +#undef _GLIBCXX_NUM_ARGS + diff --git a/libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/invoke.cc b/libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/invoke.cc new file mode 100644 index 00000000000..255fc9f6774 --- /dev/null +++ b/libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/invoke.cc @@ -0,0 +1,103 @@ +// 2005-02-27 Douglas Gregor <doug.gregor -at- gmail.com> +// +// Copyright (C) 2005 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 2.1 reference wrappers +#include <tr1/functional> +#include <tr1/type_traits> +#include <testsuite_hooks.h> +#include <testsuite_tr1.h> + +using namespace __gnu_test; + +bool test __attribute__((unused)) = true; + +struct X +{ + typedef int result_type; + + X() : bar(17) {} + + int foo(float x) { return truncate_float(x); } + int foo_c(float x) const { return truncate_float(x); } + int foo_v(float x) volatile { return truncate_float(x); } + int foo_cv(float x) const volatile { return truncate_float(x); } + + int operator()(float x) + { + return foo(x) + 1; + } + + int operator()(float x) const + { + return foo_c(x) + 2; + } + + int bar; + + private: + X(const X&); + X& operator=(const X&); +}; + +void test01() +{ + using std::tr1::ref; + using std::tr1::cref; + + ::X x; + ::X* xp = &x; + int (::X::* p_foo)(float) = &::X::foo; + int (::X::* p_foo_c)(float) const = &::X::foo_c; + int (::X::* p_foo_v)(float) volatile = &::X::foo_v; + int (::X::* p_foo_cv)(float) const volatile = &::X::foo_cv; + int ::X::* p_bar = &::X::bar; + + const float pi = 3.14; + + // Functions + VERIFY(ref(truncate_float)(pi) == 3); + + // Function pointers + VERIFY(cref(&truncate_float)(pi) == 3); + + // Member function pointers + VERIFY(ref(p_foo)(x, pi) == 3); + VERIFY(ref(p_foo)(xp, pi) == 3); + VERIFY(ref(p_foo_c)(x, pi) == 3); + VERIFY(ref(p_foo_c)(xp, pi) == 3); + VERIFY(ref(p_foo_v)(x, pi) == 3); + VERIFY(ref(p_foo_v)(xp, pi) == 3); + VERIFY(ref(p_foo_cv)(x, pi) == 3); + VERIFY(ref(p_foo_cv)(xp, pi) == 3); + + // Member data pointers + VERIFY(ref(p_bar)(x) == 17); + VERIFY(ref(p_bar)(xp) == 17); + + // Function objects + VERIFY(ref(x)(pi) == 4); + VERIFY(cref(x)(pi) == 5); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/typedefs.cc b/libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/typedefs.cc new file mode 100644 index 00000000000..3aa427d6dcc --- /dev/null +++ b/libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/typedefs.cc @@ -0,0 +1,89 @@ +// 2005-02-27 Douglas Gregor <doug.gregor -at- gmail.com> +// +// Copyright (C) 2005 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 2.1 reference wrappers +#include <tr1/functional> +#include <tr1/type_traits> +#include <testsuite_hooks.h> +#include <testsuite_tr1.h> + +using namespace __gnu_test; + +struct X {}; + +struct int_result_type { typedef int result_type; }; + +struct derives_unary : std::unary_function<int, int> {}; + +struct derives_binary : std::binary_function<int, float, int> {}; + +struct derives_unary_binary + : std::unary_function<int, int>, + std::binary_function<int, float, int> +{ + typedef int result_type; +}; + +void test01() +{ + bool test __attribute__((unused)) = true; + + using std::tr1::reference_wrapper; + using std::tr1::is_same; + using std::tr1::is_convertible; + using std::unary_function; + using std::binary_function; + + // Check result_type typedef + VERIFY((is_same<reference_wrapper<int_result_type>::result_type, int>::value)); + VERIFY((is_same<reference_wrapper<derives_unary>::result_type, int>::value)); + VERIFY((is_same<reference_wrapper<derives_binary>::result_type, int>::value)); + VERIFY((is_same<reference_wrapper<derives_unary_binary>::result_type, int>::value)); + VERIFY((is_same<reference_wrapper<int(void)>::result_type, int>::value)); + VERIFY((is_same<reference_wrapper<int(*)(void)>::result_type, int>::value)); + VERIFY((is_same<reference_wrapper<int (::X::*)()>::result_type, int>::value)); + VERIFY((is_same<reference_wrapper<int (::X::*)(float)>::result_type, int>::value)); + + // Check derivation from unary_function + VERIFY((is_convertible<reference_wrapper<derives_unary>*, unary_function<int, int>*>::value)); + VERIFY((is_convertible<reference_wrapper<derives_unary_binary>*, unary_function<int, int>*>::value)); + VERIFY((is_convertible<reference_wrapper<int(int)>*, unary_function<int, int>*>::value)); + VERIFY((is_convertible<reference_wrapper<int(*)(int)>*, unary_function<int, int>*>::value)); + VERIFY((is_convertible<reference_wrapper<int (::X::*)()>*, unary_function< ::X*, int>*>::value)); + VERIFY((is_convertible<reference_wrapper<int (::X::*)() const>*, unary_function<const ::X*, int>*>::value)); + VERIFY((is_convertible<reference_wrapper<int (::X::*)() volatile>*, unary_function<volatile ::X*, int>*>::value)); + VERIFY((is_convertible<reference_wrapper<int (::X::*)() const volatile>*, unary_function<const volatile ::X*, int>*>::value)); + + // Check derivation from binary_function + VERIFY((is_convertible<reference_wrapper<derives_binary>*, binary_function<int, float, int>*>::value)); + VERIFY((is_convertible<reference_wrapper<derives_unary_binary>*, binary_function<int, float, int>*>::value)); + VERIFY((is_convertible<reference_wrapper<int(int, float)>*, binary_function<int, float, int>*>::value)); + VERIFY((is_convertible<reference_wrapper<int(*)(int, float)>*, binary_function<int, float, int>*>::value)); + VERIFY((is_convertible<reference_wrapper<int (::X::*)(float)>*, binary_function< ::X*, float, int>*>::value)); + VERIFY((is_convertible<reference_wrapper<int (::X::*)(float) const>*, binary_function<const ::X*, float, int>*>::value)); + VERIFY((is_convertible<reference_wrapper<int (::X::*)(float) volatile>*, binary_function<volatile ::X*, float, int>*>::value)); + VERIFY((is_convertible<reference_wrapper<int (::X::*)(float) const volatile>*, binary_function<const volatile ::X*, float, int>*>::value)); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/tr1/3_function_objects/result_of.cc b/libstdc++-v3/testsuite/tr1/3_function_objects/result_of.cc new file mode 100644 index 00000000000..bf17f8407bf --- /dev/null +++ b/libstdc++-v3/testsuite/tr1/3_function_objects/result_of.cc @@ -0,0 +1,75 @@ +// 2005-01-26 Douglas Gregor <doug.gregor -at- gmail.com> +// +// Copyright (C) 2005 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 3.4 function return types +#include <tr1/functional> +#include <tr1/type_traits> +#include <testsuite_hooks.h> +#include <testsuite_tr1.h> + +class X {}; + +struct int_result_type { typedef int result_type; }; + +struct int_result_of +{ + template<typename F> struct result { typedef int type; }; +}; + +struct int_result_type_and_float_result_of +{ + typedef int result_type; + template<typename F> struct result { typedef float type; }; +}; + +void test01() +{ + bool test __attribute__((unused)) = true; + + using std::tr1::result_of; + using std::tr1::is_same; + using namespace __gnu_test; + + typedef int (*func_ptr)(float, double); + typedef int (&func_ref)(float, double); + typedef int (::X::*mem_func_ptr)(float); + typedef int (::X::*mem_func_ptr_c)(float) const; + typedef int (::X::*mem_func_ptr_v)(float) volatile; + typedef int (::X::*mem_func_ptr_cv)(float) const volatile; + + VERIFY((is_same<result_of<int_result_type(float)>::type, int>::value)); + VERIFY((is_same<result_of<int_result_of(double)>::type, int>::value)); + VERIFY((is_same<result_of<int_result_of(void)>::type, void>::value)); + VERIFY((is_same<result_of<const int_result_of(double)>::type, int>::value)); + VERIFY((is_same<result_of<volatile int_result_of(void)>::type, void>::value)); + VERIFY((is_same<result_of<int_result_type_and_float_result_of(char)>::type, int>::value)); + VERIFY((is_same<result_of<func_ptr(char, float)>::type, int>::value)); + VERIFY((is_same<result_of<func_ref(char, float)>::type, int>::value)); + VERIFY((is_same<result_of<mem_func_ptr(::X,char)>::type, int>::value)); + VERIFY((is_same<result_of<mem_func_ptr_c(::X,char)>::type, int>::value)); + VERIFY((is_same<result_of<mem_func_ptr_v(::X,char)>::type, int>::value)); + VERIFY((is_same<result_of<mem_func_ptr_cv(::X,char)>::type, int>::value)); +} + +int main() +{ + test01(); + return 0; +} |