1    	//
2    	//  bind/mem_fn_template.hpp
3    	//
4    	//  Do not include this header directly
5    	//
6    	//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
7    	//
8    	// Distributed under the Boost Software License, Version 1.0. (See
9    	// accompanying file LICENSE_1_0.txt or copy at
10   	// http://www.boost.org/LICENSE_1_0.txt)
11   	//
12   	//  See http://www.boost.org/libs/bind/mem_fn.html for documentation.
13   	//
14   	
15   	#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
16   	# define BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
17   	#endif
18   	
19   	// mf0
20   	
21   	template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf0)
22   	{
23   	public:
24   	
25   	    typedef R result_type;
26   	    typedef T * argument_type;
27   	
28   	private:
29   	    
30   	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) ())
31   	    F f_;
32   	
33   	    template<class U> R call(U & u, T const *) const
34   	    {
35   	        BOOST_MEM_FN_RETURN (u.*f_)();
36   	    }
37   	
38   	    template<class U> R call(U & u, void const *) const
39   	    {
40   	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)();
41   	    }
42   	
43   	public:
44   	    
45   	    explicit BOOST_MEM_FN_NAME(mf0)(F f): f_(f) {}
46   	
47   	    R operator()(T * p) const
48   	    {
49   	        BOOST_MEM_FN_RETURN (p->*f_)();
50   	    }
51   	
52   	    template<class U> R operator()(U & u) const
53   	    {
54   	        U const * p = 0;
55   	        BOOST_MEM_FN_RETURN call(u, p);
56   	    }
57   	
58   	#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
59   	
60   	    template<class U> R operator()(U const & u) const
61   	    {
62   	        U const * p = 0;
63   	        BOOST_MEM_FN_RETURN call(u, p);
64   	    }
65   	
66   	#endif
67   	
68   	    R operator()(T & t) const
69   	    {
70   	        BOOST_MEM_FN_RETURN (t.*f_)();
71   	    }
72   	
73   	    bool operator==(BOOST_MEM_FN_NAME(mf0) const & rhs) const
74   	    {
75   	        return f_ == rhs.f_;
76   	    }
77   	
78   	    bool operator!=(BOOST_MEM_FN_NAME(mf0) const & rhs) const
79   	    {
80   	        return f_ != rhs.f_;
81   	    }
82   	};
83   	
84   	// cmf0
85   	
86   	template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf0)
87   	{
88   	public:
89   	
90   	    typedef R result_type;
91   	    typedef T const * argument_type;
92   	
93   	private:
94   	    
95   	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) () const)
96   	    F f_;
97   	
98   	    template<class U> R call(U & u, T const *) const
99   	    {
100  	        BOOST_MEM_FN_RETURN (u.*f_)();
101  	    }
102  	
103  	    template<class U> R call(U & u, void const *) const
104  	    {
105  	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)();
106  	    }
107  	
108  	public:
109  	    
110  	    explicit BOOST_MEM_FN_NAME(cmf0)(F f): f_(f) {}
111  	
112  	    template<class U> R operator()(U const & u) const
113  	    {
114  	        U const * p = 0;
115  	        BOOST_MEM_FN_RETURN call(u, p);
116  	    }
117  	
118  	    R operator()(T const & t) const
119  	    {
120  	        BOOST_MEM_FN_RETURN (t.*f_)();
121  	    }
122  	
123  	    bool operator==(BOOST_MEM_FN_NAME(cmf0) const & rhs) const
124  	    {
125  	        return f_ == rhs.f_;
126  	    }
127  	
128  	    bool operator!=(BOOST_MEM_FN_NAME(cmf0) const & rhs) const
129  	    {
130  	        return f_ != rhs.f_;
131  	    }
132  	};
133  	
134  	// mf1
135  	
136  	template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf1)
137  	{
138  	public:
139  	
140  	    typedef R result_type;
141  	    typedef T * first_argument_type;
142  	    typedef A1 second_argument_type;
143  	
144  	private:
145  	    
146  	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1))
147  	    F f_;
148  	
149  	    template<class U, class B1> R call(U & u, T const *, B1 & b1) const
150  	    {
151  	        BOOST_MEM_FN_RETURN (u.*f_)(b1);
152  	    }
153  	
154  	    template<class U, class B1> R call(U & u, void const *, B1 & b1) const
155  	    {
156  	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1);
157  	    }
158  	
159  	public:
160  	    
161  	    explicit BOOST_MEM_FN_NAME(mf1)(F f): f_(f) {}
162  	
163  	    R operator()(T * p, A1 a1) const
164  	    {
165  	        BOOST_MEM_FN_RETURN (p->*f_)(a1);
166  	    }
167  	
168  	    template<class U> R operator()(U & u, A1 a1) const
169  	    {
170  	        U const * p = 0;
171  	        BOOST_MEM_FN_RETURN call(u, p, a1);
172  	    }
173  	
174  	#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
175  	
176  	    template<class U> R operator()(U const & u, A1 a1) const
177  	    {
178  	        U const * p = 0;
179  	        BOOST_MEM_FN_RETURN call(u, p, a1);
180  	    }
181  	
182  	#endif
183  	
184  	    R operator()(T & t, A1 a1) const
185  	    {
186  	        BOOST_MEM_FN_RETURN (t.*f_)(a1);
187  	    }
188  	
189  	    bool operator==(BOOST_MEM_FN_NAME(mf1) const & rhs) const
190  	    {
191  	        return f_ == rhs.f_;
192  	    }
193  	
194  	    bool operator!=(BOOST_MEM_FN_NAME(mf1) const & rhs) const
195  	    {
196  	        return f_ != rhs.f_;
197  	    }
198  	};
199  	
200  	// cmf1
201  	
202  	template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf1)
203  	{
204  	public:
205  	
206  	    typedef R result_type;
207  	    typedef T const * first_argument_type;
208  	    typedef A1 second_argument_type;
209  	
210  	private:
211  	    
212  	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1) const)
213  	    F f_;
214  	
215  	    template<class U, class B1> R call(U & u, T const *, B1 & b1) const
216  	    {
217  	        BOOST_MEM_FN_RETURN (u.*f_)(b1);
218  	    }
219  	
220  	    template<class U, class B1> R call(U & u, void const *, B1 & b1) const
221  	    {
222  	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1);
223  	    }
224  	
225  	public:
226  	    
227  	    explicit BOOST_MEM_FN_NAME(cmf1)(F f): f_(f) {}
228  	
229  	    template<class U> R operator()(U const & u, A1 a1) const
230  	    {
231  	        U const * p = 0;
232  	        BOOST_MEM_FN_RETURN call(u, p, a1);
233  	    }
234  	
235  	    R operator()(T const & t, A1 a1) const
236  	    {
237  	        BOOST_MEM_FN_RETURN (t.*f_)(a1);
238  	    }
239  	
240  	    bool operator==(BOOST_MEM_FN_NAME(cmf1) const & rhs) const
241  	    {
242  	        return f_ == rhs.f_;
243  	    }
244  	
245  	    bool operator!=(BOOST_MEM_FN_NAME(cmf1) const & rhs) const
246  	    {
247  	        return f_ != rhs.f_;
248  	    }
249  	};
250  	
251  	// mf2
252  	
253  	template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf2)
254  	{
255  	public:
256  	
257  	    typedef R result_type;
258  	
259  	private:
260  	    
261  	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2))
262  	    F f_;
263  	
264  	    template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const
265  	    {
266  	        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);
267  	    }
268  	
269  	    template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const
270  	    {
271  	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);
272  	    }
273  	
274  	public:
275  	    
276  	    explicit BOOST_MEM_FN_NAME(mf2)(F f): f_(f) {}
277  	
(1) Event pass_by_value: Passing parameter a1 of type "boost::spirit::classic::position_iterator<boost::spirit::classic::multi_pass<std::istream_iterator<char, char, std::char_traits<char>, long>, boost::spirit::classic::multi_pass_policies::input_iterator, boost::spirit::classic::multi_pass_policies::ref_counted, boost::spirit::classic::multi_pass_policies::buf_id_check, boost::spirit::classic::multi_pass_policies::std_deque>, boost::spirit::classic::file_position_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::spirit::classic::nil_t>" (size 152 bytes) by value.
(2) Event pass_by_value: Passing parameter a2 of type "boost::spirit::classic::position_iterator<boost::spirit::classic::multi_pass<std::istream_iterator<char, char, std::char_traits<char>, long>, boost::spirit::classic::multi_pass_policies::input_iterator, boost::spirit::classic::multi_pass_policies::ref_counted, boost::spirit::classic::multi_pass_policies::buf_id_check, boost::spirit::classic::multi_pass_policies::std_deque>, boost::spirit::classic::file_position_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::spirit::classic::nil_t>" (size 152 bytes) by value.
278  	    R operator()(T * p, A1 a1, A2 a2) const
279  	    {
280  	        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2);
281  	    }
282  	
283  	    template<class U> R operator()(U & u, A1 a1, A2 a2) const
284  	    {
285  	        U const * p = 0;
286  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2);
287  	    }
288  	
289  	#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
290  	
291  	    template<class U> R operator()(U const & u, A1 a1, A2 a2) const
292  	    {
293  	        U const * p = 0;
294  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2);
295  	    }
296  	
297  	#endif
298  	
299  	    R operator()(T & t, A1 a1, A2 a2) const
300  	    {
301  	        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2);
302  	    }
303  	
304  	    bool operator==(BOOST_MEM_FN_NAME(mf2) const & rhs) const
305  	    {
306  	        return f_ == rhs.f_;
307  	    }
308  	
309  	    bool operator!=(BOOST_MEM_FN_NAME(mf2) const & rhs) const
310  	    {
311  	        return f_ != rhs.f_;
312  	    }
313  	};
314  	
315  	// cmf2
316  	
317  	template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf2)
318  	{
319  	public:
320  	
321  	    typedef R result_type;
322  	
323  	private:
324  	    
325  	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2) const)
326  	    F f_;
327  	
328  	    template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const
329  	    {
330  	        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);
331  	    }
332  	
333  	    template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const
334  	    {
335  	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);
336  	    }
337  	
338  	public:
339  	    
340  	    explicit BOOST_MEM_FN_NAME(cmf2)(F f): f_(f) {}
341  	
342  	    template<class U> R operator()(U const & u, A1 a1, A2 a2) const
343  	    {
344  	        U const * p = 0;
345  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2);
346  	    }
347  	
348  	    R operator()(T const & t, A1 a1, A2 a2) const
349  	    {
350  	        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2);
351  	    }
352  	
353  	    bool operator==(BOOST_MEM_FN_NAME(cmf2) const & rhs) const
354  	    {
355  	        return f_ == rhs.f_;
356  	    }
357  	
358  	    bool operator!=(BOOST_MEM_FN_NAME(cmf2) const & rhs) const
359  	    {
360  	        return f_ != rhs.f_;
361  	    }
362  	};
363  	
364  	// mf3
365  	
366  	template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf3)
367  	{
368  	public:
369  	
370  	    typedef R result_type;
371  	
372  	private:
373  	    
374  	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3))
375  	    F f_;
376  	
377  	    template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const
378  	    {
379  	        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);
380  	    }
381  	
382  	    template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const
383  	    {
384  	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3);
385  	    }
386  	
387  	public:
388  	    
389  	    explicit BOOST_MEM_FN_NAME(mf3)(F f): f_(f) {}
390  	
391  	    R operator()(T * p, A1 a1, A2 a2, A3 a3) const
392  	    {
393  	        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3);
394  	    }
395  	
396  	    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3) const
397  	    {
398  	        U const * p = 0;
399  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3);
400  	    }
401  	
402  	#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
403  	
404  	    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const
405  	    {
406  	        U const * p = 0;
407  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3);
408  	    }
409  	
410  	#endif
411  	
412  	    R operator()(T & t, A1 a1, A2 a2, A3 a3) const
413  	    {
414  	        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3);
415  	    }
416  	
417  	    bool operator==(BOOST_MEM_FN_NAME(mf3) const & rhs) const
418  	    {
419  	        return f_ == rhs.f_;
420  	    }
421  	
422  	    bool operator!=(BOOST_MEM_FN_NAME(mf3) const & rhs) const
423  	    {
424  	        return f_ != rhs.f_;
425  	    }
426  	};
427  	
428  	// cmf3
429  	
430  	template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf3)
431  	{
432  	public:
433  	
434  	    typedef R result_type;
435  	
436  	private:
437  	
438  	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const)
439  	    F f_;
440  	
441  	    template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const
442  	    {
443  	        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);
444  	    }
445  	
446  	    template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const
447  	    {
448  	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3);
449  	    }
450  	
451  	public:
452  	
453  	    explicit BOOST_MEM_FN_NAME(cmf3)(F f): f_(f) {}
454  	
455  	    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const
456  	    {
457  	        U const * p = 0;
458  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3);
459  	    }
460  	
461  	    R operator()(T const & t, A1 a1, A2 a2, A3 a3) const
462  	    {
463  	        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3);
464  	    }
465  	
466  	    bool operator==(BOOST_MEM_FN_NAME(cmf3) const & rhs) const
467  	    {
468  	        return f_ == rhs.f_;
469  	    }
470  	
471  	    bool operator!=(BOOST_MEM_FN_NAME(cmf3) const & rhs) const
472  	    {
473  	        return f_ != rhs.f_;
474  	    }
475  	};
476  	
477  	// mf4
478  	
479  	template<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf4)
480  	{
481  	public:
482  	
483  	    typedef R result_type;
484  	
485  	private:
486  	    
487  	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4))
488  	    F f_;
489  	
490  	    template<class U, class B1, class B2, class B3, class B4> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const
491  	    {
492  	        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4);
493  	    }
494  	
495  	    template<class U, class B1, class B2, class B3, class B4> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const
496  	    {
497  	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);
498  	    }
499  	
500  	public:
501  	    
502  	    explicit BOOST_MEM_FN_NAME(mf4)(F f): f_(f) {}
503  	
504  	    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4) const
505  	    {
506  	        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4);
507  	    }
508  	
509  	    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4) const
510  	    {
511  	        U const * p = 0;
512  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4);
513  	    }
514  	
515  	#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
516  	
517  	    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const
518  	    {
519  	        U const * p = 0;
520  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4);
521  	    }
522  	
523  	#endif
524  	
525  	    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4) const
526  	    {
527  	        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4);
528  	    }
529  	
530  	    bool operator==(BOOST_MEM_FN_NAME(mf4) const & rhs) const
531  	    {
532  	        return f_ == rhs.f_;
533  	    }
534  	
535  	    bool operator!=(BOOST_MEM_FN_NAME(mf4) const & rhs) const
536  	    {
537  	        return f_ != rhs.f_;
538  	    }
539  	};
540  	
541  	// cmf4
542  	
543  	template<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf4)
544  	{
545  	public:
546  	
547  	    typedef R result_type;
548  	
549  	private:
550  	    
551  	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const)
552  	    F f_;
553  	
554  	    template<class U, class B1, class B2, class B3, class B4> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const
555  	    {
556  	        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4);
557  	    }
558  	
559  	    template<class U, class B1, class B2, class B3, class B4> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const
560  	    {
561  	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);
562  	    }
563  	
564  	public:
565  	    
566  	    explicit BOOST_MEM_FN_NAME(cmf4)(F f): f_(f) {}
567  	
568  	    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const
569  	    {
570  	        U const * p = 0;
571  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4);
572  	    }
573  	
574  	    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4) const
575  	    {
576  	        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4);
577  	    }
578  	
579  	    bool operator==(BOOST_MEM_FN_NAME(cmf4) const & rhs) const
580  	    {
581  	        return f_ == rhs.f_;
582  	    }
583  	
584  	    bool operator!=(BOOST_MEM_FN_NAME(cmf4) const & rhs) const
585  	    {
586  	        return f_ != rhs.f_;
587  	    }
588  	};
589  	
590  	// mf5
591  	
592  	template<class R, class T, class A1, class A2, class A3, class A4, class A5 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf5)
593  	{
594  	public:
595  	
596  	    typedef R result_type;
597  	
598  	private:
599  	    
600  	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5))
601  	    F f_;
602  	
603  	    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const
604  	    {
605  	        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5);
606  	    }
607  	
608  	    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const
609  	    {
610  	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5);
611  	    }
612  	
613  	public:
614  	    
615  	    explicit BOOST_MEM_FN_NAME(mf5)(F f): f_(f) {}
616  	
617  	    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
618  	    {
619  	        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5);
620  	    }
621  	
622  	    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
623  	    {
624  	        U const * p = 0;
625  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5);
626  	    }
627  	
628  	#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
629  	
630  	    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
631  	    {
632  	        U const * p = 0;
633  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5);
634  	    }
635  	
636  	#endif
637  	
638  	    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
639  	    {
640  	        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5);
641  	    }
642  	
643  	    bool operator==(BOOST_MEM_FN_NAME(mf5) const & rhs) const
644  	    {
645  	        return f_ == rhs.f_;
646  	    }
647  	
648  	    bool operator!=(BOOST_MEM_FN_NAME(mf5) const & rhs) const
649  	    {
650  	        return f_ != rhs.f_;
651  	    }
652  	};
653  	
654  	// cmf5
655  	
656  	template<class R, class T, class A1, class A2, class A3, class A4, class A5 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf5)
657  	{
658  	public:
659  	
660  	    typedef R result_type;
661  	
662  	private:
663  	    
664  	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const)
665  	    F f_;
666  	
667  	    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const
668  	    {
669  	        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5);
670  	    }
671  	
672  	    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const
673  	    {
674  	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5);
675  	    }
676  	
677  	public:
678  	    
679  	    explicit BOOST_MEM_FN_NAME(cmf5)(F f): f_(f) {}
680  	
681  	    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
682  	    {
683  	        U const * p = 0;
684  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5);
685  	    }
686  	
687  	    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
688  	    {
689  	        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5);
690  	    }
691  	
692  	    bool operator==(BOOST_MEM_FN_NAME(cmf5) const & rhs) const
693  	    {
694  	        return f_ == rhs.f_;
695  	    }
696  	
697  	    bool operator!=(BOOST_MEM_FN_NAME(cmf5) const & rhs) const
698  	    {
699  	        return f_ != rhs.f_;
700  	    }
701  	};
702  	
703  	// mf6
704  	
705  	template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf6)
706  	{
707  	public:
708  	
709  	    typedef R result_type;
710  	
711  	private:
712  	
713  	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6))
714  	    F f_;
715  	
716  	    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const
717  	    {
718  	        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6);
719  	    }
720  	
721  	    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const
722  	    {
723  	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6);
724  	    }
725  	
726  	public:
727  	
728  	    explicit BOOST_MEM_FN_NAME(mf6)(F f): f_(f) {}
729  	
730  	    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
731  	    {
732  	        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6);
733  	    }
734  	
735  	    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
736  	    {
737  	        U const * p = 0;
738  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6);
739  	    }
740  	
741  	#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
742  	
743  	    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
744  	    {
745  	        U const * p = 0;
746  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6);
747  	    }
748  	
749  	#endif
750  	
751  	    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
752  	    {
753  	        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6);
754  	    }
755  	
756  	    bool operator==(BOOST_MEM_FN_NAME(mf6) const & rhs) const
757  	    {
758  	        return f_ == rhs.f_;
759  	    }
760  	
761  	    bool operator!=(BOOST_MEM_FN_NAME(mf6) const & rhs) const
762  	    {
763  	        return f_ != rhs.f_;
764  	    }
765  	};
766  	
767  	// cmf6
768  	
769  	template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf6)
770  	{
771  	public:
772  	
773  	    typedef R result_type;
774  	
775  	private:
776  	    
777  	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const)
778  	    F f_;
779  	
780  	    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const
781  	    {
782  	        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6);
783  	    }
784  	
785  	    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const
786  	    {
787  	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6);
788  	    }
789  	
790  	public:
791  	    
792  	    explicit BOOST_MEM_FN_NAME(cmf6)(F f): f_(f) {}
793  	
794  	    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
795  	    {
796  	        U const * p = 0;
797  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6);
798  	    }
799  	
800  	    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
801  	    {
802  	        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6);
803  	    }
804  	
805  	    bool operator==(BOOST_MEM_FN_NAME(cmf6) const & rhs) const
806  	    {
807  	        return f_ == rhs.f_;
808  	    }
809  	
810  	    bool operator!=(BOOST_MEM_FN_NAME(cmf6) const & rhs) const
811  	    {
812  	        return f_ != rhs.f_;
813  	    }
814  	};
815  	
816  	// mf7
817  	
818  	template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf7)
819  	{
820  	public:
821  	
822  	    typedef R result_type;
823  	
824  	private:
825  	    
826  	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7))
827  	    F f_;
828  	
829  	    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const
830  	    {
831  	        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7);
832  	    }
833  	
834  	    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const
835  	    {
836  	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7);
837  	    }
838  	
839  	public:
840  	    
841  	    explicit BOOST_MEM_FN_NAME(mf7)(F f): f_(f) {}
842  	
843  	    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
844  	    {
845  	        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7);
846  	    }
847  	
848  	    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
849  	    {
850  	        U const * p = 0;
851  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7);
852  	    }
853  	
854  	#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
855  	
856  	    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
857  	    {
858  	        U const * p = 0;
859  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7);
860  	    }
861  	
862  	#endif
863  	
864  	    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
865  	    {
866  	        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7);
867  	    }
868  	
869  	    bool operator==(BOOST_MEM_FN_NAME(mf7) const & rhs) const
870  	    {
871  	        return f_ == rhs.f_;
872  	    }
873  	
874  	    bool operator!=(BOOST_MEM_FN_NAME(mf7) const & rhs) const
875  	    {
876  	        return f_ != rhs.f_;
877  	    }
878  	};
879  	
880  	// cmf7
881  	
882  	template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf7)
883  	{
884  	public:
885  	
886  	    typedef R result_type;
887  	
888  	private:
889  	    
890  	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7) const)
891  	    F f_;
892  	
893  	    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const
894  	    {
895  	        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7);
896  	    }
897  	
898  	    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const
899  	    {
900  	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7);
901  	    }
902  	
903  	public:
904  	    
905  	    explicit BOOST_MEM_FN_NAME(cmf7)(F f): f_(f) {}
906  	
907  	    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
908  	    {
909  	        U const * p = 0;
910  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7);
911  	    }
912  	
913  	    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
914  	    {
915  	        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7);
916  	    }
917  	
918  	    bool operator==(BOOST_MEM_FN_NAME(cmf7) const & rhs) const
919  	    {
920  	        return f_ == rhs.f_;
921  	    }
922  	
923  	    bool operator!=(BOOST_MEM_FN_NAME(cmf7) const & rhs) const
924  	    {
925  	        return f_ != rhs.f_;
926  	    }
927  	};
928  	
929  	// mf8
930  	
931  	template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf8)
932  	{
933  	public:
934  	
935  	    typedef R result_type;
936  	
937  	private:
938  	    
939  	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8))
940  	    F f_;
941  	
942  	    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const
943  	    {
944  	        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
945  	    }
946  	
947  	    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const
948  	    {
949  	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
950  	    }
951  	
952  	public:
953  	    
954  	    explicit BOOST_MEM_FN_NAME(mf8)(F f): f_(f) {}
955  	
956  	    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
957  	    {
958  	        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
959  	    }
960  	
961  	    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
962  	    {
963  	        U const * p = 0;
964  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8);
965  	    }
966  	
967  	#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
968  	
969  	    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
970  	    {
971  	        U const * p = 0;
972  	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8);
973  	    }
974  	
975  	#endif
976  	
977  	    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
978  	    {
979  	        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
980  	    }
981  	
982  	    bool operator==(BOOST_MEM_FN_NAME(mf8) const & rhs) const
983  	    {
984  	        return f_ == rhs.f_;
985  	    }
986  	
987  	    bool operator!=(BOOST_MEM_FN_NAME(mf8) const & rhs) const
988  	    {
989  	        return f_ != rhs.f_;
990  	    }
991  	};
992  	
993  	// cmf8
994  	
995  	template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf8)
996  	{
997  	public:
998  	
999  	    typedef R result_type;
1000 	
1001 	private:
1002 	    
1003 	    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8) const)
1004 	    F f_;
1005 	
1006 	    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const
1007 	    {
1008 	        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
1009 	    }
1010 	
1011 	    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const
1012 	    {
1013 	        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
1014 	    }
1015 	
1016 	public:
1017 	    
1018 	    explicit BOOST_MEM_FN_NAME(cmf8)(F f): f_(f) {}
1019 	
1020 	    R operator()(T const * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
1021 	    {
1022 	        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
1023 	    }
1024 	
1025 	    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
1026 	    {
1027 	        U const * p = 0;
1028 	        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8);
1029 	    }
1030 	
1031 	    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
1032 	    {
1033 	        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
1034 	    }
1035 	
1036 	    bool operator==(BOOST_MEM_FN_NAME(cmf8) const & rhs) const
1037 	    {
1038 	        return f_ == rhs.f_;
1039 	    }
1040 	
1041 	    bool operator!=(BOOST_MEM_FN_NAME(cmf8) const & rhs) const
1042 	    {
1043 	        return f_ != rhs.f_;
1044 	    }
1045 	};
1046 	
1047 	#undef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
1048