This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[libstdc++ PATH] tr1::bind support


Hello,

The attached patch introduces support for tr1::bind for libstdc++-v3 (section 
3.6 of TR1). Tested against i686-pc-linux-gnu, no regressions. This 
particular patch is against the main trunk (4.1.0), but I would like to 
commit to both the main trunk and the 4.0 branch. ChangeLog follows.

Details for those that wish to review the internals:

First of all, there's a lot of preprocessor magic going on here. In addition 
to functional_iterate.h (the repetition header for functional), there is also 
a mu_iterate.h and bind_iterate.h. bind_iterate.h is the most interesting 
because it's included 20 times from inside functional_iterate.h, using a 
different repetition header (bind_repeat.h) and a different set of variables. 
Reviewing can be made a LOT easier by looking at the preprocessed output and 
focusing on some small number of parameters only. Now, on to the fun part:

Class template _Mu implements the "mu" function used in the original bind 
proposal, which corresponds to 3.6.3/5 in TR1 and is responsible for 
evaluating bound arguments when calling a bind() function object. Consider 
the following code:

  int x = 17;
  bind(std::plus<int>(), 5, _1)(x);

The call to bind() returns a function object (of type _Bind<...>), which is 
then called with the value "x". That evaluation calls std::plus<int>()(v1, 
v2). "mu" is responsible for turning 5 into v1 and _1 into x. (The result of 
the overally expression is 22). _Mu needs to deal with four cases 
(corresponding to the four bullets in TR1 3.6.3/5), each of which is handled 
by a partial specialization of _Mu in the functional header. _Mu has two 
interesting properties:
  1) It is a function object (with enough smarts to work with result_of), but 
always takes two parameters: a reference to the bound argument and a tuple of 
the arguments that were passed to bind. We use a tuple so that we require 
less repetition. However, it also means that we're limited to passing 10 
arguments to bind() because tuple<> accepts at most 10 parameters. See 
workarounds in, e.g., mu_iterate.h.
  2) Bullet 2 handles nested bind expressions, which require that the tuple be 
explicitly "unpacked" into several arguments before calling the underlying 
bind expression. Thus, unfortunately, means that we need to have many 
operator() overloads, provided by mu_iterate.h.

The actual bind() overloads and the _Bind/_Bind_result function objects 
returned by _Bind aren't as interested as one would expect. They are defined 
based on the number of bound parameters (i.e., the number of parameters 
passed to bind(...)), in functional_iterate.h. The _Bind version has a weak 
result type, whereas the _Bind_result version matches calls to bind<R>(), 
where R is the specified return type. Each _Bind/_Bind_result object has lots 
of operator() overloads, because the function objects returned by bind can 
take any number of parameters. Thus, the operator()'s are defined in 
bind_iterate.h, included through bind_repeat.h. Note that these operator()'s 
use _Mu to map the values to be passed on to the bound function object, both 
for return type deduction (based on result_of, of course) and for building 
the actual arguments.

If there are any questions, I'll answer them as best I can. The code makes the 
most sense when reading along with TR1 3.6 and/or the original bind() 
proposal.

 Doug

2005-03-20  Douglas Gregor  <doug.gregor@gmail.com>

 * include/Makefile.am (tr1_headers): Add bind and mu repetition
 headers and reference_wrapper<> forwarding header.
 * include/Makefile.in: Regenerate.
 * include/tr1/bind_iterate.h: Implementation of function call
 operators for the function object returned from tr1::bind().
 * include/tr1/bind_repeat.h: Bind-specific repetition header,
 akin to include/tr1/repeat.h. 
 * include/tr1/functional (_Mem_fn): Bug fix: declare result member
 template for use with result_of.
 (is_bind_expression): New.
 (is_placeholder): New.
 (_Placeholder): New. Placeholder type for bind.
 (_Mu): New. Implementation detail of bind.
 (_Bind, _Bind_result): New. Function objects returned by bind.
 (_GLIBCXX_JOIN): New. Required to create bind placeholders.
 * include/tr1/functional_iterate.h (_Bind, _Bind_result, bind):
 New. Implementation of tr1::bind.
 * include/tr1/mu_iterate.h (_Mu): result template and operator()
 for the _Mu helper to bind.
 * include/tr1/ref_fwd.h (reference_wrapper): Forward declaration
 used by tuple header.
 (ref): Ditto.
 (cref): Ditto.
 * include/tr1/repeat.h: Add bind-specific repetition macros.
 * include/tr1/tuple: Use reference_wrapper forwarding header for
 initial definitions, then include <tr1/functional> at the end, to
 make the circular dependencies work.
 (tie): Support zero-argument tie() function.
 * testsuite/testsuite_tr1.h: Remove extraneous semicolon.
 * testsuite/tr1/3_function_objects/bind/all_bound.cc: New test of
 bind() functionality with parameters bound.
 * testsuite/tr1/3_function_objects/bind/nested.cc: New test of
 nested bind() expressions.
 * testsuite/tr1/3_function_objects/bind/placeholders.cc: New test
 of bind() placeholders.
 * testsuite/tr1/3_function_objects/bind/ref.cc: New test of bind()
 with arguments bound via reference_wrapper<>.

Index: include/Makefile.am
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/Makefile.am,v
retrieving revision 1.98
diff -c -3 -p -b -r1.98 Makefile.am
*** include/Makefile.am	16 Mar 2005 06:04:06 -0000	1.98
--- include/Makefile.am	20 Mar 2005 20:13:09 -0000
*************** tr1_srcdir = ${glibcxx_srcdir}/include/t
*** 228,236 ****
--- 228,240 ----
  tr1_builddir = ./tr1
  tr1_headers = \
  	${tr1_srcdir}/array \
+ 	${tr1_srcdir}/bind_repeat.h \
+ 	${tr1_srcdir}/bind_iterate.h \
+ 	${tr1_srcdir}/mu_iterate.h \
  	${tr1_srcdir}/functional \
  	${tr1_srcdir}/functional_iterate.h \
  	${tr1_srcdir}/memory \
+ 	${tr1_srcdir}/ref_fwd.h \
  	${tr1_srcdir}/ref_wrap_iterate.h \
  	${tr1_srcdir}/repeat.h \
  	${tr1_srcdir}/tuple \
Index: include/Makefile.in
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/Makefile.in,v
retrieving revision 1.128
diff -c -3 -p -b -r1.128 Makefile.in
*** include/Makefile.in	16 Mar 2005 06:04:07 -0000	1.128
--- include/Makefile.in	20 Mar 2005 20:13:10 -0000
*************** tr1_srcdir = ${glibcxx_srcdir}/include/t
*** 444,452 ****
--- 444,456 ----
  tr1_builddir = ./tr1
  tr1_headers = \
  	${tr1_srcdir}/array \
+ 	${tr1_srcdir}/bind_repeat.h \
+ 	${tr1_srcdir}/bind_iterate.h \
+ 	${tr1_srcdir}/mu_iterate.h \
  	${tr1_srcdir}/functional \
  	${tr1_srcdir}/functional_iterate.h \
  	${tr1_srcdir}/memory \
+ 	${tr1_srcdir}/ref_fwd.h \
  	${tr1_srcdir}/ref_wrap_iterate.h \
  	${tr1_srcdir}/repeat.h \
  	${tr1_srcdir}/tuple \
Index: include/tr1/bind_iterate.h
===================================================================
RCS file: include/tr1/bind_iterate.h
diff -N include/tr1/bind_iterate.h
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- include/tr1/bind_iterate.h	20 Mar 2005 20:13:10 -0000
***************
*** 0 ****
--- 1,83 ----
+ // TR1 functional -*- 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 bind_iterate.h
+  *  This is an internal header file, included by other library headers.
+  *  You should not attempt to use it directly.
+  */
+ 
+ // This is a hack to work around the 10-parameter limitation of
+ // tuple<>.
+ #if _GLIBCXX_BIND_NUM_ARGS <= 10
+ 
+ #if _GLIBCXX_BIND_NUM_ARGS > 0
+ template<_GLIBCXX_BIND_TEMPLATE_PARAMS>
+ #endif
+ #ifdef _GLIBCXX_BIND_HAS_RESULT_TYPE
+ result_type
+ #else
+ typename result_of<_Functor(_GLIBCXX_BIND_V_TEMPLATE_ARGS())>::type
+ #endif
+ operator()(_GLIBCXX_BIND_PARAMS)
+ { return _M_f(_GLIBCXX_BIND_V_ARGS); }
+ 
+ #if _GLIBCXX_BIND_NUM_ARGS > 0
+ template<_GLIBCXX_BIND_TEMPLATE_PARAMS>
+ #endif
+ #ifdef _GLIBCXX_BIND_HAS_RESULT_TYPE
+ result_type
+ #else
+ typename result_of<const _Functor(_GLIBCXX_BIND_V_TEMPLATE_ARGS(const))>::type
+ #endif
+ operator()(_GLIBCXX_BIND_PARAMS) const
+ { return _M_f(_GLIBCXX_BIND_V_ARGS); }
+ 
+ #if _GLIBCXX_BIND_NUM_ARGS > 0
+ template<_GLIBCXX_BIND_TEMPLATE_PARAMS>
+ #endif
+ #ifdef _GLIBCXX_BIND_HAS_RESULT_TYPE
+ result_type
+ #else
+ typename result_of<volatile _Functor(_GLIBCXX_BIND_V_TEMPLATE_ARGS(volatile))>::type
+ #endif
+ operator()(_GLIBCXX_BIND_PARAMS) volatile
+ { return _M_f(_GLIBCXX_BIND_V_ARGS); }
+ 
+ #if _GLIBCXX_BIND_NUM_ARGS > 0
+ template<_GLIBCXX_BIND_TEMPLATE_PARAMS>
+ #endif
+ #ifdef _GLIBCXX_BIND_HAS_RESULT_TYPE
+ result_type
+ #else
+ typename result_of<const volatile _Functor(_GLIBCXX_BIND_V_TEMPLATE_ARGS(const volatile))>::type
+ #endif
+ operator()(_GLIBCXX_BIND_PARAMS) const volatile
+ { return _M_f(_GLIBCXX_BIND_V_ARGS); }
+ #endif
Index: include/tr1/bind_repeat.h
===================================================================
RCS file: include/tr1/bind_repeat.h
diff -N include/tr1/bind_repeat.h
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- include/tr1/bind_repeat.h	20 Mar 2005 20:13:10 -0000
***************
*** 0 ****
--- 1,332 ----
+ // TR1 code repetition for bind -*- 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 bind_repeat.h
+  *  This is an internal header file, included by other library headers.
+  *  You should not attempt to use it directly.
+  */
+ 
+ #ifndef _GLIBCXX_BIND_REPEAT_HEADER
+ #  error Internal error: _GLIBCXX_BIND_REPEAT_HEADER must be set
+ #endif /* _GLIBCXX_BIND_REPEAT_HEADER */
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 0
+ #define _GLIBCXX_BIND_COMMA
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS
+ #define _GLIBCXX_BIND_PARAMS
+ #define _GLIBCXX_BIND_ARGS
+ #  include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 1
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1
+ #define _GLIBCXX_BIND_ARGS __u1
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ #define _GLIBCXX_BIND_NUM_ARGS 2
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2
+ #define _GLIBCXX_BIND_ARGS __u1, __u2
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 3
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 4
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 5
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 6
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 7
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 8
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 9
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8, _U9& __u9
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8, __u9
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 10
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9, typename _U10
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9, _U10
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8, _U9& __u9, _U10& __u10
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8, __u9, __u10
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 11
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9, typename _U10, typename _U11
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9, _U10, _U11
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8, _U9& __u9, _U10& __u10, _U11& __u11
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8, __u9, __u10, __u11
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 12
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9, typename _U10, typename _U11, typename _U12
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9, _U10, _U11, _U12
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8, _U9& __u9, _U10& __u10, _U11& __u11, _U12& __u12
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8, __u9, __u10, __u11, __u12
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 13
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9, typename _U10, typename _U11, typename _U12, typename _U13
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9, _U10, _U11, _U12, _U13
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8, _U9& __u9, _U10& __u10, _U11& __u11, _U12& __u12, _U13& __u13
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8, __u9, __u10, __u11, __u12, __u13
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 14
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9, typename _U10, typename _U11, typename _U12, typename _U13, typename _U14
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9, _U10, _U11, _U12, _U13, _U14
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8, _U9& __u9, _U10& __u10, _U11& __u11, _U12& __u12, _U13& __u13, _U14& __u14
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8, __u9, __u10, __u11, __u12, __u13, __u14
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 15
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9, typename _U10, typename _U11, typename _U12, typename _U13, typename _U14, typename _U15
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9, _U10, _U11, _U12, _U13, _U14, _U15
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8, _U9& __u9, _U10& __u10, _U11& __u11, _U12& __u12, _U13& __u13, _U14& __u14, _U15& __u15
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8, __u9, __u10, __u11, __u12, __u13, __u14, __u15
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 16
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9, typename _U10, typename _U11, typename _U12, typename _U13, typename _U14, typename _U15, typename _U16
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9, _U10, _U11, _U12, _U13, _U14, _U15, _U16
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8, _U9& __u9, _U10& __u10, _U11& __u11, _U12& __u12, _U13& __u13, _U14& __u14, _U15& __u15, _U16& __u16
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8, __u9, __u10, __u11, __u12, __u13, __u14, __u15, __u16
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 17
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9, typename _U10, typename _U11, typename _U12, typename _U13, typename _U14, typename _U15, typename _U16, typename _U17
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9, _U10, _U11, _U12, _U13, _U14, _U15, _U16, _U17
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8, _U9& __u9, _U10& __u10, _U11& __u11, _U12& __u12, _U13& __u13, _U14& __u14, _U15& __u15, _U16& __u16, _U17& __u17
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8, __u9, __u10, __u11, __u12, __u13, __u14, __u15, __u16, __u17
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 18
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9, typename _U10, typename _U11, typename _U12, typename _U13, typename _U14, typename _U15, typename _U16, typename _U17, typename _U18
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9, _U10, _U11, _U12, _U13, _U14, _U15, _U16, _U17, _U18
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8, _U9& __u9, _U10& __u10, _U11& __u11, _U12& __u12, _U13& __u13, _U14& __u14, _U15& __u15, _U16& __u16, _U17& __u17, _U18& __u18
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8, __u9, __u10, __u11, __u12, __u13, __u14, __u15, __u16, __u17, __u18
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 19
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9, typename _U10, typename _U11, typename _U12, typename _U13, typename _U14, typename _U15, typename _U16, typename _U17, typename _U18, typename _U19
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9, _U10, _U11, _U12, _U13, _U14, _U15, _U16, _U17, _U18, _U19
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8, _U9& __u9, _U10& __u10, _U11& __u11, _U12& __u12, _U13& __u13, _U14& __u14, _U15& __u15, _U16& __u16, _U17& __u17, _U18& __u18, _U19& __u19
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8, __u9, __u10, __u11, __u12, __u13, __u14, __u15, __u16, __u17, __u18, __u19
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
+ #define _GLIBCXX_BIND_NUM_ARGS 20
+ #define _GLIBCXX_BIND_COMMA ,
+ #define _GLIBCXX_BIND_TEMPLATE_PARAMS typename _U1, typename _U2, typename _U3, typename _U4, typename _U5, typename _U6, typename _U7, typename _U8, typename _U9, typename _U10, typename _U11, typename _U12, typename _U13, typename _U14, typename _U15, typename _U16, typename _U17, typename _U18, typename _U19, typename _U20
+ #define _GLIBCXX_BIND_TEMPLATE_ARGS _U1, _U2, _U3, _U4, _U5, _U6, _U7, _U8, _U9, _U10, _U11, _U12, _U13, _U14, _U15, _U16, _U17, _U18, _U19, _U20
+ #define _GLIBCXX_BIND_PARAMS _U1& __u1, _U2& __u2, _U3& __u3, _U4& __u4, _U5& __u5, _U6& __u6, _U7& __u7, _U8& __u8, _U9& __u9, _U10& __u10, _U11& __u11, _U12& __u12, _U13& __u13, _U14& __u14, _U15& __u15, _U16& __u16, _U17& __u17, _U18& __u18, _U19& __u19, _U20& __u20
+ #define _GLIBCXX_BIND_ARGS __u1, __u2, __u3, __u4, __u5, __u6, __u7, __u8, __u9, __u10, __u11, __u12, __u13, __u14, __u15, __u16, __u17, __u18, __u19, __u20
+ #include _GLIBCXX_BIND_REPEAT_HEADER
+ #undef _GLIBCXX_BIND_ARGS
+ #undef _GLIBCXX_BIND_PARAMS
+ #undef _GLIBCXX_BIND_TEMPLATE_ARGS
+ #undef _GLIBCXX_BIND_TEMPLATE_PARAMS
+ #undef _GLIBCXX_BIND_COMMA
+ #undef _GLIBCXX_BIND_NUM_ARGS
+ 
Index: include/tr1/functional
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/tr1/functional,v
retrieving revision 1.9
diff -c -3 -p -b -r1.9 functional
*** include/tr1/functional	3 Mar 2005 17:45:44 -0000	1.9
--- include/tr1/functional	20 Mar 2005 20:13:11 -0000
***************
*** 40,45 ****
--- 40,46 ----
  #include <bits/cpp_type_traits.h>
  #include <string>               // for std::tr1::hash
  #include <cstdlib>              // for std::abort
+ #include <tr1/tuple>
  
  namespace std
  {
*************** namespace tr1
*** 452,457 ****
--- 453,469 ----
               == sizeof(__check_const<_Tp>(__get_ref<_Tp>(), (_Tp*)0)))>
        { };
  
+     template<typename _Signature>
+       struct result;
+ 
+     template<typename _CVMem, typename _Tp>
+       struct result<_CVMem(_Tp)>
+         : public _Result_type<_Tp> { };
+ 
+     template<typename _CVMem, typename _Tp>
+       struct result<_CVMem(_Tp&)>
+         : public _Result_type<_Tp> { };
+ 
      explicit _Mem_fn(_Res _Class::*__pm) : __pm(__pm) { }
  
      // Handle objects
*************** namespace tr1
*** 491,496 ****
--- 503,703 ----
      }
  
    /**
+    *  @brief Determines if the given type _Tp is a function object
+    *  should be treated as a subexpression when evaluating calls to
+    *  function objects returned by bind(). [TR1 3.6.1]
+    */
+   template<typename _Tp>
+     struct is_bind_expression
+     {
+       static const bool value = false;
+     };
+ 
+   /**
+    *  @brief Determines if the given type _Tp is a placeholder in a
+    *  bind() expression and, if so, which placeholder it is. [TR1 3.6.2]
+    */
+   template<typename _Tp>
+     struct is_placeholder
+     {
+       static const int value = 0;
+     };
+ 
+   /**
+    *  @if maint
+    *  The type of placeholder objects defined by libstdc++.
+    *  @endif
+    */
+   template<int _Num> struct _Placeholder { };
+ 
+   /**
+    *  @if maint
+    *  Partial specialization of is_placeholder that provides the placeholder
+    *  number for the placeholder objects defined by libstdc++.
+    *  @endif
+    */
+   template<int _Num>
+     struct is_placeholder<_Placeholder<_Num> >
+     {
+       static const int value = _Num;
+     };
+ 
+   /**
+    *  @if maint
+    *  Maps an argument to bind() into an actual argument to the bound
+    *  function object [TR1 3.6.3/5]. Only the first parameter should
+    *  be specified: the rest are used to determine among the various
+    *  implementations. Note that, although this class is a function
+    *  object, isn't not entirely normal because it takes only two
+    *  parameters regardless of the number of parameters passed to the
+    *  bind expression. The first parameter is the bound argument and
+    *  the second parameter is a tuple containing references to the
+    *  rest of the arguments.
+    *  @endif
+    */
+   template<typename _Arg,
+            bool _IsBindExp = is_bind_expression<_Arg>::value,
+            bool _IsPlaceholder = (is_placeholder<_Arg>::value > 0)>
+     class _Mu;
+ 
+   /**
+    *  @if maint
+    *  If the argument is reference_wrapper<_Tp>, returns the
+    *  underlying reference. [TR1 3.6.3/5 bullet 1]
+    *  @endif
+    */
+   template<typename _Tp>
+     class _Mu<reference_wrapper<_Tp>, false, false>
+     {
+     public:
+       typedef _Tp& result_type;
+ 
+       /* Note: This won't actually work for const volatile
+        * reference_wrappers, because reference_wrapper::get() is const
+        * but not volatile-qualified. This might be a defect in the TR.
+        */
+       template<typename _CVRef, typename _Tuple>
+       result_type
+       operator()(_CVRef& __arg, const _Tuple&) const volatile
+       { return __arg.get(); }
+     };
+ 
+   /**
+    *  @if maint
+    *  If the argument is a bind expression, we invoke the underlying
+    *  function object with the same cv-qualifiers as we are given and
+    *  pass along all of our arguments (unwrapped). [TR1 3.6.3/5 bullet 2]
+    *  @endif
+    */
+   template<typename _Arg>
+     class _Mu<_Arg, true, false>
+     {
+     public:
+       template<typename _Signature> class result;
+ 
+ #define _GLIBCXX_REPEAT_HEADER <tr1/mu_iterate.h>
+ #  include <tr1/repeat.h>
+ #undef _GLIBCXX_REPEAT_HEADER
+     };
+ 
+   /**
+    *  @if maint
+    *  If the argument is a placeholder for the Nth argument, returns
+    *  a reference to the Nth argument to the bind function object.
+    *  [TR1 3.6.3/5 bullet 3]
+    *  @endif
+    */
+   template<typename _Arg>
+     class _Mu<_Arg, false, true>
+     {
+     public:
+       template<typename _Signature> class result;
+ 
+       template<typename _CVMu, typename _CVArg, typename _Tuple>
+       class result<_CVMu(_CVArg, _Tuple)>
+       {
+         // Add a reference, if it hasn't already been done for us.
+         // This allows us to be a little bit sloppy in constructing
+         // the tuple that we pass to result_of<...>.
+         typedef typename tuple_element<(is_placeholder<_Arg>::value - 1),
+                                        _Tuple>::type __base_type;
+ 
+       public:
+         typedef typename add_reference<__base_type>::type type;
+       };
+ 
+       template<typename _Tuple>
+       typename result<_Mu(_Arg, _Tuple)>::type
+       operator()(const volatile _Arg&, const _Tuple& __tuple) const volatile
+       {
+         return ::std::tr1::get<(is_placeholder<_Arg>::value - 1)>(__tuple);
+       }
+     };
+ 
+   /**
+    *  @if maint
+    *  If the argument is just a value, returns a reference to that
+    *  value. The cv-qualifiers on the reference are the same as the
+    *  cv-qualifiers on the _Mu object. [TR1 3.6.3/5 bullet 4]
+    *  @endif
+    */
+   template<typename _Arg>
+     class _Mu<_Arg, false, false>
+     {
+     public:
+       template<typename _Signature> struct result;
+ 
+       template<typename _CVMu, typename _CVArg, typename _Tuple>
+       struct result<_CVMu(_CVArg, _Tuple)>
+       {
+         typedef typename add_reference<_CVArg>::type type;
+       };
+ 
+       // Pick up the cv-qualifiers of the argument
+       template<typename _CVArg, typename _Tuple>
+       _CVArg& operator()(_CVArg& __arg, const _Tuple&) const volatile
+       { return __arg; }
+     };
+ 
+   /**
+    *  @if maint
+    *  Type of the function object returned from bind().
+    *  @endif
+    */
+    template<typename _Signature>
+      struct _Bind;
+ 
+   /**
+    *  @if maint
+    *  Type of the function object returned from bind<R>().
+    *  @endif
+    */
+    template<typename _Result, typename _Signature>
+      struct _Bind_result;
+ 
+   /**
+    *  @if maint
+    *  Class template _Bind is always a bind expression.
+    *  @endif
+    */
+    template<typename _Signature>
+     struct is_bind_expression<_Bind<_Signature> >
+     {
+       static const bool value = true;
+     };
+ 
+   /**
+    *  @if maint
+    *  Class template _Bind_result is always a bind expression.
+    *  @endif
+    */
+    template<typename _Result, typename _Signature>
+    struct is_bind_expression<_Bind_result<_Result, _Signature> >
+     {
+       static const bool value = true;
+     };
+ 
+   /**
     *  @brief Exception class thrown when class template function's
     *  operator() is called with an empty target.
     *
*************** namespace tr1
*** 845,853 ****
--- 1052,1066 ----
        __x.swap(__y);
      }
  
+ #define _GLIBCXX_JOIN(X,Y) _GLIBCXX_JOIN2( X , Y )
+ #define _GLIBCXX_JOIN2(X,Y) _GLIBCXX_JOIN3(X,Y)
+ #define _GLIBCXX_JOIN3(X,Y) X##Y
  #define _GLIBCXX_REPEAT_HEADER <tr1/functional_iterate.h>
  #include <tr1/repeat.h>
  #undef _GLIBCXX_REPEAT_HEADER
+ #undef _GLIBCXX_JOIN3
+ #undef _GLIBCXX_JOIN2
+ #undef _GLIBCXX_JOIN
  
  // 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.
Index: include/tr1/functional_iterate.h
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/tr1/functional_iterate.h,v
retrieving revision 1.2
diff -c -3 -p -b -r1.2 functional_iterate.h
*** include/tr1/functional_iterate.h	2 Mar 2005 12:56:26 -0000	1.2
--- include/tr1/functional_iterate.h	20 Mar 2005 20:13:12 -0000
***************
*** 28,34 ****
  // invalidate any other reasons why the executable file might be covered by
  // the GNU General Public License.
  
! /** @file function_iterate.h
   *  This is an internal header file, included by other library headers.
   *  You should not attempt to use it directly.
   */
--- 28,34 ----
  // invalidate any other reasons why the executable file might be covered by
  // the GNU General Public License.
  
! /** @file functional_iterate.h
   *  This is an internal header file, included by other library headers.
   *  You should not attempt to use it directly.
   */
*************** template<typename _Res, typename _Class 
*** 390,396 ****
    };
  #endif
  
! template<typename _Signature, typename _Functor> class _Function_handler;
  
  template<typename _Res, typename _Functor _GLIBCXX_COMMA
           _GLIBCXX_TEMPLATE_PARAMS>
--- 390,490 ----
    };
  #endif
  
! #if _GLIBCXX_NUM_ARGS > 0
! namespace placeholders
! {
! namespace
! {
!    _Placeholder<_GLIBCXX_NUM_ARGS> _GLIBCXX_JOIN(_,_GLIBCXX_NUM_ARGS);
! }
! }
! #endif
! 
! template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
! class _Bind<_Functor(_GLIBCXX_TEMPLATE_ARGS)>
!   : public _Weak_result_type<_Functor>
! {
!   typedef _Bind __self_type;
! 
!   _Functor _M_f;
!   _GLIBCXX_BIND_MEMBERS
! 
!  public:
! #if _GLIBCXX_NUM_ARGS == 0
!   explicit
! #endif
!   _Bind(_Functor __f _GLIBCXX_COMMA _GLIBCXX_PARAMS)
!     : _M_f(__f) _GLIBCXX_COMMA _GLIBCXX_BIND_MEMBERS_INIT { }
! 
! #define _GLIBCXX_BIND_REPEAT_HEADER <tr1/bind_iterate.h>
! #include <tr1/bind_repeat.h>
! #undef _GLIBCXX_BIND_REPEAT_HEADER
! };
! 
! template<typename _Result, typename _Functor
!          _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
! class _Bind_result<_Result, _Functor(_GLIBCXX_TEMPLATE_ARGS)>
! {
!   _Functor _M_f;
!   _GLIBCXX_BIND_MEMBERS
! 
!  public:
!   typedef _Result result_type;
! 
! #if _GLIBCXX_NUM_ARGS == 0
!   explicit
! #endif
!   _Bind_result(_Functor __f _GLIBCXX_COMMA _GLIBCXX_PARAMS)
!     : _M_f(__f) _GLIBCXX_COMMA _GLIBCXX_BIND_MEMBERS_INIT { }
! 
! #define _GLIBCXX_BIND_REPEAT_HEADER <tr1/bind_iterate.h>
! #define _GLIBCXX_BIND_HAS_RESULT_TYPE
! #include <tr1/bind_repeat.h>
! #undef _GLIBCXX_BIND_HAS_RESULT_TYPE
! #undef _GLIBCXX_BIND_REPEAT_HEADER
! };
! 
! // Handle member pointers
! template<typename _Tp, typename _Class _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
! inline _Bind<_Mem_fn<_Tp _Class::*>(_GLIBCXX_TEMPLATE_ARGS)>
! bind(_Tp _Class::* __pm _GLIBCXX_COMMA _GLIBCXX_PARAMS)
! {
!   typedef _Bind<_Mem_fn<_Tp _Class::*>(_GLIBCXX_TEMPLATE_ARGS)> __result_type;
!   return __result_type(_Mem_fn<_Tp _Class::*>(__pm)
!                        _GLIBCXX_COMMA _GLIBCXX_ARGS);
! }
! 
! template<typename _Result, typename _Tp, typename _Class
!          _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
! inline _Bind_result<_Result, _Mem_fn<_Tp _Class::*>(_GLIBCXX_TEMPLATE_ARGS)>
! bind(_Tp _Class::* __pm _GLIBCXX_COMMA _GLIBCXX_PARAMS)
! {
!   typedef _Bind_result<_Result, _Mem_fn<_Tp _Class::*>(_GLIBCXX_TEMPLATE_ARGS)>
!     __result_type;
!   return __result_type(_Mem_fn<_Tp _Class::*>(__pm)
!                        _GLIBCXX_COMMA _GLIBCXX_ARGS);
! }
! 
! // Handle arbitrary function objects
! template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
! inline _Bind<_Functor(_GLIBCXX_TEMPLATE_ARGS)>
! bind(_Functor __f _GLIBCXX_COMMA _GLIBCXX_PARAMS)
! {
!   typedef _Bind<_Functor(_GLIBCXX_TEMPLATE_ARGS)> __result_type;
!   return __result_type(__f _GLIBCXX_COMMA _GLIBCXX_ARGS);
! }
! 
! template<typename _Result, typename _Functor
!          _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
! inline
! typename __enable_if<_Bind_result<_Result, _Functor(_GLIBCXX_TEMPLATE_ARGS)>,
!                      !is_member_pointer<_Functor>::value>::__type
! bind(_Functor __f _GLIBCXX_COMMA _GLIBCXX_PARAMS)
! {
!   typedef _Bind_result<_Result, _Functor(_GLIBCXX_TEMPLATE_ARGS)>
!     __result_type;
!   return __result_type(__f _GLIBCXX_COMMA _GLIBCXX_ARGS);
! }
  
  template<typename _Res, typename _Functor _GLIBCXX_COMMA
           _GLIBCXX_TEMPLATE_PARAMS>
Index: include/tr1/mu_iterate.h
===================================================================
RCS file: include/tr1/mu_iterate.h
diff -N include/tr1/mu_iterate.h
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- include/tr1/mu_iterate.h	20 Mar 2005 20:13:12 -0000
***************
*** 0 ****
--- 1,55 ----
+ // TR1 functional -*- 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 mu_iterate.h
+  *  This is an internal header file, included by other library headers.
+  *  You should not attempt to use it directly.
+  */
+ 
+ // This is a hack to work around the 10-parameter limitation of
+ // tuple<>.
+ #if _GLIBCXX_NUM_ARGS <= 10
+ // Determine the result type when we pass the arguments along. This
+ // involves passing along the cv-qualifiers placed on _Mu and
+ // unwrapping the argument bundle.
+ template<typename _CVMu, typename _CVArg
+          _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
+ class result<_CVMu(_CVArg, tuple<_GLIBCXX_TEMPLATE_ARGS>)>
+   : public result_of<_CVArg(_GLIBCXX_TEMPLATE_ARGS)> { };
+ 
+ template<typename _CVArg _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>
+ typename result_of<_CVArg(_GLIBCXX_TEMPLATE_ARGS)>::type
+ operator()(_CVArg& __arg, const tuple<_GLIBCXX_TEMPLATE_ARGS>& __tuple)
+   const volatile
+ {
+   return __arg(_GLIBCXX_MU_GET_TUPLE_ARGS);
+ }
+ #endif
+ 
Index: include/tr1/ref_fwd.h
===================================================================
RCS file: include/tr1/ref_fwd.h
diff -N include/tr1/ref_fwd.h
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- include/tr1/ref_fwd.h	20 Mar 2005 20:13:12 -0000
***************
*** 0 ****
--- 1,59 ----
+ 
+ 
+ // class template reference_wrapper forwarding header -*- C++ -*-
+ 
+ // Copyright (C) 2004, 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.
+ 
+ // 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_fwd.h
+  *  This is an internal header file, included by other library headers.
+  *  You should not attempt to use it directly.
+  */
+ 
+ // Douglas Gregor <doug.gregor -at- gmail.com>
+ #ifndef _TR1_REF_FWD
+ #define _TR1_REF_FWD
+ 
+ namespace std
+ {
+ namespace tr1
+ {
+ 
+ template<typename _Tp>
+   class reference_wrapper;
+ 
+ template<typename _Tp>
+   reference_wrapper<_Tp>
+   ref(_Tp& __t);
+ 
+   // Denotes a const reference should be taken to a variable.
+ template<typename _Tp>
+   reference_wrapper<const _Tp>
+   cref(const _Tp& __t);
+ }
+ }
+ #endif
Index: include/tr1/repeat.h
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/tr1/repeat.h,v
retrieving revision 1.1
diff -c -3 -p -b -r1.1 repeat.h
*** include/tr1/repeat.h	2 Mar 2005 12:56:26 -0000	1.1
--- include/tr1/repeat.h	20 Mar 2005 20:13:14 -0000
***************
*** 49,55 ****
  #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
--- 49,65 ----
  #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED
  #define _GLIBCXX_PARAMS_SHIFTED
  #define _GLIBCXX_ARGS_SHIFTED
! #define _GLIBCXX_BIND_MEMBERS_INIT
! #define _GLIBCXX_BIND_MEMBERS
! #define _GLIBCXX_MU_GET_TUPLE_ARGS
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV)
! #define _GLIBCXX_BIND_V_ARGS
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 75,81 ****
  #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
--- 85,101 ----
  #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED
  #define _GLIBCXX_PARAMS_SHIFTED
  #define _GLIBCXX_ARGS_SHIFTED
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 101,107 ****
  #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
--- 121,137 ----
  #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1
  #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1
  #define _GLIBCXX_ARGS_SHIFTED __a1
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 127,133 ****
  #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
--- 157,173 ----
  #define _GLIBCXX_TEMPLATE_ARGS_SHIFTED _T1, _T2
  #define _GLIBCXX_PARAMS_SHIFTED _T1 __a1, _T2 __a2
  #define _GLIBCXX_ARGS_SHIFTED __a1, __a2
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 153,159 ****
  #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
--- 193,209 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 179,185 ****
  #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
--- 229,245 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 205,211 ****
  #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
--- 265,281 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 231,237 ****
  #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
--- 301,317 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 257,263 ****
  #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
--- 337,353 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 283,289 ****
  #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
--- 373,389 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; _T9 _M_arg9;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8), _M_arg9(__a9)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple), ::std::tr1::get<8>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T9> _CV(_T9, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T9>()(_M_arg9, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 309,315 ****
  #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
--- 409,425 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; _T9 _M_arg9; _T10 _M_arg10;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8), _M_arg9(__a9), _M_arg10(__a10)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple), ::std::tr1::get<8>(__tuple), ::std::tr1::get<9>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T9> _CV(_T9, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T10> _CV(_T10, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T9>()(_M_arg9, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T10>()(_M_arg10, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 335,341 ****
  #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
--- 445,461 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; _T9 _M_arg9; _T10 _M_arg10; _T11 _M_arg11;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8), _M_arg9(__a9), _M_arg10(__a10), _M_arg11(__a11)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple), ::std::tr1::get<8>(__tuple), ::std::tr1::get<9>(__tuple), ::std::tr1::get<10>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T9> _CV(_T9, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T10> _CV(_T10, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T11> _CV(_T11, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T9>()(_M_arg9, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T10>()(_M_arg10, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T11>()(_M_arg11, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 361,367 ****
  #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
--- 481,497 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; _T9 _M_arg9; _T10 _M_arg10; _T11 _M_arg11; _T12 _M_arg12;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8), _M_arg9(__a9), _M_arg10(__a10), _M_arg11(__a11), _M_arg12(__a12)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple), ::std::tr1::get<8>(__tuple), ::std::tr1::get<9>(__tuple), ::std::tr1::get<10>(__tuple), ::std::tr1::get<11>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T9> _CV(_T9, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T10> _CV(_T10, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T11> _CV(_T11, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T12> _CV(_T12, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T9>()(_M_arg9, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T10>()(_M_arg10, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T11>()(_M_arg11, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T12>()(_M_arg12, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 387,393 ****
  #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
--- 517,533 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; _T9 _M_arg9; _T10 _M_arg10; _T11 _M_arg11; _T12 _M_arg12; _T13 _M_arg13;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8), _M_arg9(__a9), _M_arg10(__a10), _M_arg11(__a11), _M_arg12(__a12), _M_arg13(__a13)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple), ::std::tr1::get<8>(__tuple), ::std::tr1::get<9>(__tuple), ::std::tr1::get<10>(__tuple), ::std::tr1::get<11>(__tuple), ::std::tr1::get<12>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T9> _CV(_T9, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T10> _CV(_T10, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T11> _CV(_T11, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T12> _CV(_T12, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T13> _CV(_T13, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T9>()(_M_arg9, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T10>()(_M_arg10, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T11>()(_M_arg11, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T12>()(_M_arg12, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T13>()(_M_arg13, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 413,419 ****
  #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
--- 553,569 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; _T9 _M_arg9; _T10 _M_arg10; _T11 _M_arg11; _T12 _M_arg12; _T13 _M_arg13; _T14 _M_arg14;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8), _M_arg9(__a9), _M_arg10(__a10), _M_arg11(__a11), _M_arg12(__a12), _M_arg13(__a13), _M_arg14(__a14)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple), ::std::tr1::get<8>(__tuple), ::std::tr1::get<9>(__tuple), ::std::tr1::get<10>(__tuple), ::std::tr1::get<11>(__tuple), ::std::tr1::get<12>(__tuple), ::std::tr1::get<13>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T9> _CV(_T9, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T10> _CV(_T10, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T11> _CV(_T11, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T12> _CV(_T12, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T13> _CV(_T13, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T14> _CV(_T14, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T9>()(_M_arg9, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T10>()(_M_arg10, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T11>()(_M_arg11, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T12>()(_M_arg12, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T13>()(_M_arg13, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T14>()(_M_arg14, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 439,445 ****
  #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
--- 589,605 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; _T9 _M_arg9; _T10 _M_arg10; _T11 _M_arg11; _T12 _M_arg12; _T13 _M_arg13; _T14 _M_arg14; _T15 _M_arg15;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8), _M_arg9(__a9), _M_arg10(__a10), _M_arg11(__a11), _M_arg12(__a12), _M_arg13(__a13), _M_arg14(__a14), _M_arg15(__a15)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple), ::std::tr1::get<8>(__tuple), ::std::tr1::get<9>(__tuple), ::std::tr1::get<10>(__tuple), ::std::tr1::get<11>(__tuple), ::std::tr1::get<12>(__tuple), ::std::tr1::get<13>(__tuple), ::std::tr1::get<14>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T9> _CV(_T9, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T10> _CV(_T10, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T11> _CV(_T11, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T12> _CV(_T12, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T13> _CV(_T13, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T14> _CV(_T14, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T15> _CV(_T15, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T9>()(_M_arg9, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T10>()(_M_arg10, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T11>()(_M_arg11, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T12>()(_M_arg12, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T13>()(_M_arg13, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T14>()(_M_arg14, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T15>()(_M_arg15, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 465,471 ****
  #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
--- 625,641 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; _T9 _M_arg9; _T10 _M_arg10; _T11 _M_arg11; _T12 _M_arg12; _T13 _M_arg13; _T14 _M_arg14; _T15 _M_arg15; _T16 _M_arg16;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8), _M_arg9(__a9), _M_arg10(__a10), _M_arg11(__a11), _M_arg12(__a12), _M_arg13(__a13), _M_arg14(__a14), _M_arg15(__a15), _M_arg16(__a16)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple), ::std::tr1::get<8>(__tuple), ::std::tr1::get<9>(__tuple), ::std::tr1::get<10>(__tuple), ::std::tr1::get<11>(__tuple), ::std::tr1::get<12>(__tuple), ::std::tr1::get<13>(__tuple), ::std::tr1::get<14>(__tuple), ::std::tr1::get<15>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T9> _CV(_T9, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T10> _CV(_T10, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T11> _CV(_T11, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T12> _CV(_T12, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T13> _CV(_T13, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T14> _CV(_T14, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T15> _CV(_T15, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T16> _CV(_T16, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T9>()(_M_arg9, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T10>()(_M_arg10, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T11>()(_M_arg11, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T12>()(_M_arg12, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T13>()(_M_arg13, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T14>()(_M_arg14, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T15>()(_M_arg15, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T16>()(_M_arg16, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 491,497 ****
  #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
--- 661,677 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; _T9 _M_arg9; _T10 _M_arg10; _T11 _M_arg11; _T12 _M_arg12; _T13 _M_arg13; _T14 _M_arg14; _T15 _M_arg15; _T16 _M_arg16; _T17 _M_arg17;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8), _M_arg9(__a9), _M_arg10(__a10), _M_arg11(__a11), _M_arg12(__a12), _M_arg13(__a13), _M_arg14(__a14), _M_arg15(__a15), _M_arg16(__a16), _M_arg17(__a17)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple), ::std::tr1::get<8>(__tuple), ::std::tr1::get<9>(__tuple), ::std::tr1::get<10>(__tuple), ::std::tr1::get<11>(__tuple), ::std::tr1::get<12>(__tuple), ::std::tr1::get<13>(__tuple), ::std::tr1::get<14>(__tuple), ::std::tr1::get<15>(__tuple), ::std::tr1::get<16>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T9> _CV(_T9, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T10> _CV(_T10, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T11> _CV(_T11, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T12> _CV(_T12, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T13> _CV(_T13, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T14> _CV(_T14, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T15> _CV(_T15, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T16> _CV(_T16, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T17> _CV(_T17, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T9>()(_M_arg9, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T10>()(_M_arg10, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T11>()(_M_arg11, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T12>()(_M_arg12, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T13>()(_M_arg13, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T14>()(_M_arg14, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T15>()(_M_arg15, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T16>()(_M_arg16, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T17>()(_M_arg17, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 517,523 ****
  #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
--- 697,713 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; _T9 _M_arg9; _T10 _M_arg10; _T11 _M_arg11; _T12 _M_arg12; _T13 _M_arg13; _T14 _M_arg14; _T15 _M_arg15; _T16 _M_arg16; _T17 _M_arg17; _T18 _M_arg18;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8), _M_arg9(__a9), _M_arg10(__a10), _M_arg11(__a11), _M_arg12(__a12), _M_arg13(__a13), _M_arg14(__a14), _M_arg15(__a15), _M_arg16(__a16), _M_arg17(__a17), _M_arg18(__a18)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple), ::std::tr1::get<8>(__tuple), ::std::tr1::get<9>(__tuple), ::std::tr1::get<10>(__tuple), ::std::tr1::get<11>(__tuple), ::std::tr1::get<12>(__tuple), ::std::tr1::get<13>(__tuple), ::std::tr1::get<14>(__tuple), ::std::tr1::get<15>(__tuple), ::std::tr1::get<16>(__tuple), ::std::tr1::get<17>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T9> _CV(_T9, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T10> _CV(_T10, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T11> _CV(_T11, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T12> _CV(_T12, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T13> _CV(_T13, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T14> _CV(_T14, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T15> _CV(_T15, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T16> _CV(_T16, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T17> _CV(_T17, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T18> _CV(_T18, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T9>()(_M_arg9, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T10>()(_M_arg10, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T11>()(_M_arg11, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T12>()(_M_arg12, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T13>()(_M_arg13, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T14>()(_M_arg14, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T15>()(_M_arg15, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T16>()(_M_arg16, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T17>()(_M_arg17, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T18>()(_M_arg18, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 543,549 ****
  #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
--- 733,749 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; _T9 _M_arg9; _T10 _M_arg10; _T11 _M_arg11; _T12 _M_arg12; _T13 _M_arg13; _T14 _M_arg14; _T15 _M_arg15; _T16 _M_arg16; _T17 _M_arg17; _T18 _M_arg18; _T19 _M_arg19;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8), _M_arg9(__a9), _M_arg10(__a10), _M_arg11(__a11), _M_arg12(__a12), _M_arg13(__a13), _M_arg14(__a14), _M_arg15(__a15), _M_arg16(__a16), _M_arg17(__a17), _M_arg18(__a18), _M_arg19(__a19)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple), ::std::tr1::get<8>(__tuple), ::std::tr1::get<9>(__tuple), ::std::tr1::get<10>(__tuple), ::std::tr1::get<11>(__tuple), ::std::tr1::get<12>(__tuple), ::std::tr1::get<13>(__tuple), ::std::tr1::get<14>(__tuple), ::std::tr1::get<15>(__tuple), ::std::tr1::get<16>(__tuple), ::std::tr1::get<17>(__tuple), ::std::tr1::get<18>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T9> _CV(_T9, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T10> _CV(_T10, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T11> _CV(_T11, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T12> _CV(_T12, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T13> _CV(_T13, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T14> _CV(_T14, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T15> _CV(_T15, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T16> _CV(_T16, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T17> _CV(_T17, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T18> _CV(_T18, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T19> _CV(_T19, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T9>()(_M_arg9, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T10>()(_M_arg10, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T11>()(_M_arg11, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T12>()(_M_arg12, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T13>()(_M_arg13, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T14>()(_M_arg14, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T15>()(_M_arg15, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T16>()(_M_arg16, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T17>()(_M_arg17, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T18>()(_M_arg18, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T19>()(_M_arg19, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
***************
*** 569,575 ****
  #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
--- 769,785 ----
  #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
! #define _GLIBCXX_BIND_MEMBERS _T1 _M_arg1; _T2 _M_arg2; _T3 _M_arg3; _T4 _M_arg4; _T5 _M_arg5; _T6 _M_arg6; _T7 _M_arg7; _T8 _M_arg8; _T9 _M_arg9; _T10 _M_arg10; _T11 _M_arg11; _T12 _M_arg12; _T13 _M_arg13; _T14 _M_arg14; _T15 _M_arg15; _T16 _M_arg16; _T17 _M_arg17; _T18 _M_arg18; _T19 _M_arg19; _T20 _M_arg20;
! #define _GLIBCXX_BIND_MEMBERS_INIT _M_arg1(__a1), _M_arg2(__a2), _M_arg3(__a3), _M_arg4(__a4), _M_arg5(__a5), _M_arg6(__a6), _M_arg7(__a7), _M_arg8(__a8), _M_arg9(__a9), _M_arg10(__a10), _M_arg11(__a11), _M_arg12(__a12), _M_arg13(__a13), _M_arg14(__a14), _M_arg15(__a15), _M_arg16(__a16), _M_arg17(__a17), _M_arg18(__a18), _M_arg19(__a19), _M_arg20(__a20)
! #define _GLIBCXX_MU_GET_TUPLE_ARGS ::std::tr1::get<0>(__tuple), ::std::tr1::get<1>(__tuple), ::std::tr1::get<2>(__tuple), ::std::tr1::get<3>(__tuple), ::std::tr1::get<4>(__tuple), ::std::tr1::get<5>(__tuple), ::std::tr1::get<6>(__tuple), ::std::tr1::get<7>(__tuple), ::std::tr1::get<8>(__tuple), ::std::tr1::get<9>(__tuple), ::std::tr1::get<10>(__tuple), ::std::tr1::get<11>(__tuple), ::std::tr1::get<12>(__tuple), ::std::tr1::get<13>(__tuple), ::std::tr1::get<14>(__tuple), ::std::tr1::get<15>(__tuple), ::std::tr1::get<16>(__tuple), ::std::tr1::get<17>(__tuple), ::std::tr1::get<18>(__tuple), ::std::tr1::get<19>(__tuple)
! #define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T2> _CV(_T2, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T3> _CV(_T3, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T4> _CV(_T4, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T5> _CV(_T5, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T6> _CV(_T6, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T7> _CV(_T7, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T8> _CV(_T8, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T9> _CV(_T9, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T10> _CV(_T10, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T11> _CV(_T11, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T12> _CV(_T12, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T13> _CV(_T13, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T14> _CV(_T14, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T15> _CV(_T15, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T16> _CV(_T16, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T17> _CV(_T17, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T18> _CV(_T18, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T19> _CV(_T19, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type, typename result_of<_Mu<_T20> _CV(_T20, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type
! #define _GLIBCXX_BIND_V_ARGS _Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T2>()(_M_arg2, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T3>()(_M_arg3, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T4>()(_M_arg4, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T5>()(_M_arg5, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T6>()(_M_arg6, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T7>()(_M_arg7, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T8>()(_M_arg8, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T9>()(_M_arg9, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T10>()(_M_arg10, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T11>()(_M_arg11, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T12>()(_M_arg12, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T13>()(_M_arg13, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T14>()(_M_arg14, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T15>()(_M_arg15, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T16>()(_M_arg16, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T17>()(_M_arg17, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T18>()(_M_arg18, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T19>()(_M_arg19, ::std::tr1::tie(_GLIBCXX_BIND_ARGS)), _Mu<_T20>()(_M_arg20, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))
! #include _GLIBCXX_REPEAT_HEADER
! #undef _GLIBCXX_BIND_V_ARGS
! #undef _GLIBCXX_BIND_V_TEMPLATE_ARGS
! #undef _GLIBCXX_MU_GET_TUPLE_ARGS
! #undef _GLIBCXX_BIND_MEMBERS_INIT
! #undef _GLIBCXX_BIND_MEMBERS
  #undef _GLIBCXX_ARGS_SHIFTED
  #undef _GLIBCXX_PARAMS_SHIFTED
  #undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED
Index: include/tr1/tuple
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/tr1/tuple,v
retrieving revision 1.7
diff -c -3 -p -b -r1.7 tuple
*** include/tr1/tuple	22 Feb 2005 17:07:06 -0000	1.7
--- include/tr1/tuple	20 Mar 2005 20:13:16 -0000
***************
*** 39,45 ****
  #define _TUPLE 1
  
  #include <tr1/utility>
! #include <tr1/functional>
  
  namespace std
  {
--- 39,45 ----
  #define _TUPLE 1
  
  #include <tr1/utility>
! #include <tr1/ref_fwd.h>
  
  namespace std
  {
*************** namespace tr1
*** 1360,1365 ****
--- 1360,1369 ----
  
  
    // Forms a tuple of references to a list of variables.
+   inline tuple<>
+   tie()
+   { return tuple<>(); }
+ 
    template< typename _Tp0>
      tuple< _Tp0&>
      tie( _Tp0& __t0)
*************** namespace tr1
*** 1454,1458 ****
--- 1458,1464 ----
  }
  }
  
+ #include <tr1/functional>
+ 
  #endif
  
Index: testsuite/testsuite_tr1.h
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/testsuite/testsuite_tr1.h,v
retrieving revision 1.12
diff -c -3 -p -b -r1.12 testsuite_tr1.h
*** testsuite/testsuite_tr1.h	7 Mar 2005 22:22:35 -0000	1.12
--- testsuite/testsuite_tr1.h	20 Mar 2005 20:13:16 -0000
*************** namespace __gnu_test
*** 197,202 ****
      int foo_v()  volatile       { return 3; }
      int foo_cv() const volatile { return 4; }
    };
! }; // namespace __gnu_test
  
  #endif // _GLIBCXX_TESTSUITE_TR1_H
--- 197,202 ----
      int foo_v()  volatile       { return 3; }
      int foo_cv() const volatile { return 4; }
    };
! } // namespace __gnu_test
  
  #endif // _GLIBCXX_TESTSUITE_TR1_H
*** /dev/null	Wed Dec 31 19:00:00 1969
--- testsuite/tr1/3_function_objects/bind/all_bound.cc	Sun Mar 20 10:59:50 2005
***************
*** 0 ****
--- 1,45 ----
+ // 2005-03-20 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.6 function object binders
+ #include <tr1/functional>
+ #include <testsuite_hooks.h>
+ #include <testsuite_tr1.h>
+ 
+ using namespace __gnu_test;
+ 
+ bool test __attribute__((unused)) = true;
+ 
+ // Operations on empty function<> objects
+ void test01()
+ {
+   using std::tr1::bind;
+ 
+   VERIFY( bind(std::plus<int>(), 3, 5)() == 8 );
+   VERIFY( bind(std::minus<int>(), 3, 5)() == -2 );
+   VERIFY( bind<int>(std::plus<int>(), 3, 5)() == 8 );
+   VERIFY( bind<int>(std::minus<int>(), 3, 5)() == -2 );
+ }
+ 
+ int main()
+ {
+   test01();
+   return 0;
+ }
*** /dev/null	Wed Dec 31 19:00:00 1969
--- testsuite/tr1/3_function_objects/bind/nested.cc	Sun Mar 20 12:05:17 2005
***************
*** 0 ****
--- 1,46 ----
+ // 2005-03-20 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.6 function object binders
+ #include <tr1/functional>
+ #include <testsuite_hooks.h>
+ #include <testsuite_tr1.h>
+ 
+ using namespace __gnu_test;
+ 
+ bool test __attribute__((unused)) = true;
+ 
+ // Operations on empty function<> objects
+ void test01()
+ {
+   using std::tr1::bind;
+   using namespace std::tr1::placeholders;
+ 
+   int five = 5;
+   int seven = 7;
+   VERIFY( bind(std::multiplies<int>(), _1, bind(std::minus<int>(), 6, _2))(five, seven) == -5 );
+   VERIFY( bind(std::multiplies<int>(), _1, bind(std::minus<int>(), 6, _2))(seven, five) == 7 );
+ }
+ 
+ int main()
+ {
+   test01();
+   return 0;
+ }
*** /dev/null	Wed Dec 31 19:00:00 1969
--- testsuite/tr1/3_function_objects/bind/placeholders.cc	Sun Mar 20 11:51:58 2005
***************
*** 0 ****
--- 1,46 ----
+ // 2005-03-20 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.6 function object binders
+ #include <tr1/functional>
+ #include <testsuite_hooks.h>
+ #include <testsuite_tr1.h>
+ 
+ using namespace __gnu_test;
+ 
+ bool test __attribute__((unused)) = true;
+ 
+ // Operations on empty function<> objects
+ void test01()
+ {
+   using std::tr1::bind;
+   using namespace std::tr1::placeholders;
+ 
+   int five = 5;
+   int seven = 7;
+   VERIFY( bind(std::minus<int>(), _1, _2)(five, seven) == -2 );
+   VERIFY( bind(std::minus<int>(), _2, _1)(five, seven) == 2 );
+ }
+ 
+ int main()
+ {
+   test01();
+   return 0;
+ }
*** /dev/null	Wed Dec 31 19:00:00 1969
--- testsuite/tr1/3_function_objects/bind/ref.cc	Sun Mar 20 11:04:04 2005
***************
*** 0 ****
--- 1,60 ----
+ // 2005-03-20 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.6 function object binders
+ #include <tr1/functional>
+ #include <testsuite_hooks.h>
+ #include <testsuite_tr1.h>
+ 
+ using namespace __gnu_test;
+ 
+ bool test __attribute__((unused)) = true;
+ 
+ struct X
+ {
+   X() : bar(17) {}
+ 
+   int foo(int x, int y) { return bar + x + y; }
+ 
+   int bar;
+ 
+ private:
+   X(const X&);
+   X& operator=(const X&);
+ };
+ 
+ // Operations on empty function<> objects
+ void test01()
+ {
+   using std::tr1::bind;
+   using std::tr1::ref;
+   ::X x;
+ 
+   VERIFY( bind(&::X::foo, ref(x), 1, 2)() == 20 );
+   VERIFY( bind<int>(&::X::foo, ref(x), 1, 2)() == 20 );
+   VERIFY( bind(&::X::bar, ref(x))() == 17 );
+   VERIFY( bind<int>(&::X::bar, ref(x))() == 17 );
+ }
+ 
+ int main()
+ {
+   test01();
+   return 0;
+ }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]