Topic: Revision of N3702: Introducing an optional parameter
Author: Mikhail Semenov <mikhailsemenov1957@gmail.com>
Date: Sat, 21 Sep 2013 12:01:21 -0700 (PDT)
Raw View
------=_Part_3485_20469894.1379790081477
Content-Type: multipart/alternative;
boundary="----=_Part_3486_15221040.1379790081477"
------=_Part_3486_15221040.1379790081477
Content-Type: text/plain; charset=ISO-8859-1
The revised version has an improved implementation, which allows to pass
objects, pointers to objects and smart pointers as the second parameter to
mem_fn.
--
---
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
Visit this group at http://groups.google.com/a/isocpp.org/group/std-proposals/.
------=_Part_3486_15221040.1379790081477
Content-Type: text/html; charset=ISO-8859-1
<div dir="ltr">The revised version has an improved implementation, which allows to pass objects, pointers to objects and smart pointers as the second parameter to mem_fn. </div>
<p></p>
-- <br />
<br />
--- <br />
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.<br />
To post to this group, send email to std-proposals@isocpp.org.<br />
Visit this group at <a href="http://groups.google.com/a/isocpp.org/group/std-proposals/">http://groups.google.com/a/isocpp.org/group/std-proposals/</a>.<br />
------=_Part_3486_15221040.1379790081477--
------=_Part_3485_20469894.1379790081477
Content-Type: text/html; charset=windows-1252; name=mem_fn_revised.htm
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename=mem_fn_revised.htm
X-Attachment-Id: 70169989-8ada-46b8-8a67-6d404a01949a
Content-ID: <70169989-8ada-46b8-8a67-6d404a01949a>
<html>
<head>
<meta http-equiv=3DContent-Type content=3D"text/html; charset=3Dwindows-125=
2">
<meta name=3DGenerator content=3D"Microsoft Word 14 (filtered)">
<style>
<!--
/* Font Definitions */
@font-face
=09{font-family:SimSun;
=09panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
=09{font-family:"Cambria Math";
=09panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
=09{font-family:Cambria;
=09panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
=09{font-family:Calibri;
=09panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
=09{font-family:Verdana;
=09panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
=09{font-family:"Anonymous Pro";
=09panose-1:2 6 6 9 3 2 2 0 5 4;}
@font-face
=09{font-family:"Segoe UI";
=09panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
=09{font-family:"\@SimSun";
=09panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
=09{font-family:Consolas;
=09panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
=09{font-family:"Trebuchet MS";
=09panose-1:2 11 6 3 2 2 2 2 2 4;}
@font-face
=09{font-family:"Arial Rounded MT Bold";
=09panose-1:2 15 7 4 3 5 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
=09{margin-top:0cm;
=09margin-right:0cm;
=09margin-bottom:8.0pt;
=09margin-left:0cm;
=09line-height:115%;
=09font-size:12.0pt;
=09font-family:"Times New Roman","serif";}
h1
=09{mso-style-link:"Heading 1 Char";
=09margin-top:12.0pt;
=09margin-right:0cm;
=09margin-bottom:3.0pt;
=09margin-left:0cm;
=09line-height:115%;
=09page-break-after:avoid;
=09font-size:16.0pt;
=09font-family:"Verdana","sans-serif";}
h2
=09{mso-style-link:"Heading 2 Char";
=09margin-top:12.0pt;
=09margin-right:0cm;
=09margin-bottom:3.0pt;
=09margin-left:0cm;
=09line-height:115%;
=09page-break-after:avoid;
=09font-size:15.0pt;
=09font-family:"Times New Roman","serif";}
h3
=09{mso-style-link:"Heading 3 Char";
=09margin-top:12.0pt;
=09margin-right:0cm;
=09margin-bottom:3.0pt;
=09margin-left:0cm;
=09line-height:115%;
=09page-break-after:avoid;
=09font-size:13.0pt;
=09font-family:"Cambria","serif";}
p.MsoHeader, li.MsoHeader, div.MsoHeader
=09{mso-style-link:"Header Char";
=09margin-top:0cm;
=09margin-right:0cm;
=09margin-bottom:8.0pt;
=09margin-left:0cm;
=09line-height:115%;
=09font-size:12.0pt;
=09font-family:"Times New Roman","serif";}
p.MsoFooter, li.MsoFooter, div.MsoFooter
=09{mso-style-link:"Footer Char";
=09margin-top:0cm;
=09margin-right:0cm;
=09margin-bottom:8.0pt;
=09margin-left:0cm;
=09line-height:115%;
=09font-size:12.0pt;
=09font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
=09{color:blue;
=09text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
=09{color:purple;
=09text-decoration:underline;}
strong
=09{font-family:"Calibri","sans-serif";}
p.MsoNoSpacing, li.MsoNoSpacing, div.MsoNoSpacing
=09{margin:0cm;
=09margin-bottom:.0001pt;
=09font-size:12.0pt;
=09font-family:"Times New Roman","serif";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
=09{margin-top:0cm;
=09margin-right:0cm;
=09margin-bottom:8.0pt;
=09margin-left:36.0pt;
=09line-height:115%;
=09font-size:12.0pt;
=09font-family:"Times New Roman","serif";}
p.MsoQuote, li.MsoQuote, div.MsoQuote
=09{mso-style-link:"Quote Char";
=09margin-top:0cm;
=09margin-right:0cm;
=09margin-bottom:8.0pt;
=09margin-left:0cm;
=09line-height:115%;
=09font-size:12.0pt;
=09font-family:"Trebuchet MS","sans-serif";
=09color:black;
=09font-style:italic;}
p.MsoIntenseQuote, li.MsoIntenseQuote, div.MsoIntenseQuote
=09{mso-style-link:"Intense Quote Char";
=09margin-top:10.0pt;
=09margin-right:46.8pt;
=09margin-bottom:14.0pt;
=09margin-left:46.8pt;
=09line-height:115%;
=09font-size:12.0pt;
=09font-family:"Arial Rounded MT Bold","sans-serif";
=09font-weight:bold;}
span.MsoIntenseEmphasis
=09{font-family:"Trebuchet MS","sans-serif";
=09color:windowtext;
=09font-weight:bold;
=09font-style:normal;}
span.Heading1Char
=09{mso-style-name:"Heading 1 Char";
=09mso-style-link:"Heading 1";
=09font-family:"Verdana","sans-serif";
=09font-weight:bold;}
span.Heading2Char
=09{mso-style-name:"Heading 2 Char";
=09mso-style-link:"Heading 2";
=09font-family:"Times New Roman","serif";
=09font-weight:bold;}
span.Heading3Char
=09{mso-style-name:"Heading 3 Char";
=09mso-style-link:"Heading 3";
=09font-family:"Cambria","serif";
=09font-weight:bold;}
span.HeaderChar
=09{mso-style-name:"Header Char";
=09mso-style-link:Header;
=09font-family:"Times New Roman","serif";}
span.FooterChar
=09{mso-style-name:"Footer Char";
=09mso-style-link:Footer;
=09font-family:"Times New Roman","serif";}
span.QuoteChar
=09{mso-style-name:"Quote Char";
=09mso-style-link:Quote;
=09font-family:"Trebuchet MS","sans-serif";
=09color:black;
=09font-style:italic;}
span.IntenseQuoteChar
=09{mso-style-name:"Intense Quote Char";
=09mso-style-link:"Intense Quote";
=09font-family:"Arial Rounded MT Bold","sans-serif";
=09font-weight:bold;}
p.msolistparagraphcxspfirst, li.msolistparagraphcxspfirst, div.msolistparag=
raphcxspfirst
=09{mso-style-name:msolistparagraphcxspfirst;
=09margin-top:0cm;
=09margin-right:0cm;
=09margin-bottom:0cm;
=09margin-left:36.0pt;
=09margin-bottom:.0001pt;
=09line-height:115%;
=09font-size:12.0pt;
=09font-family:"Times New Roman","serif";}
p.msolistparagraphcxspmiddle, li.msolistparagraphcxspmiddle, div.msolistpar=
agraphcxspmiddle
=09{mso-style-name:msolistparagraphcxspmiddle;
=09margin-top:0cm;
=09margin-right:0cm;
=09margin-bottom:0cm;
=09margin-left:36.0pt;
=09margin-bottom:.0001pt;
=09line-height:115%;
=09font-size:12.0pt;
=09font-family:"Times New Roman","serif";}
p.msolistparagraphcxsplast, li.msolistparagraphcxsplast, div.msolistparagra=
phcxsplast
=09{mso-style-name:msolistparagraphcxsplast;
=09margin-top:0cm;
=09margin-right:0cm;
=09margin-bottom:8.0pt;
=09margin-left:36.0pt;
=09line-height:115%;
=09font-size:12.0pt;
=09font-family:"Times New Roman","serif";}
p.ecxmsonormal, li.ecxmsonormal, div.ecxmsonormal
=09{mso-style-name:ecxmsonormal;
=09margin-top:0cm;
=09margin-right:0cm;
=09margin-bottom:16.2pt;
=09margin-left:0cm;
=09font-size:12.0pt;
=09font-family:"Times New Roman","serif";}
p.msochpdefault, li.msochpdefault, div.msochpdefault
=09{mso-style-name:msochpdefault;
=09margin-right:0cm;
=09margin-left:0cm;
=09font-size:10.0pt;
=09font-family:"Calibri","sans-serif";}
span.unsafesenderemail1
=09{mso-style-name:unsafesenderemail1;}
..MsoChpDefault
=09{font-size:10.0pt;
=09font-family:"Calibri","sans-serif";}
@page WordSection1
=09{size:595.3pt 841.9pt;
=09margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
=09{page:WordSection1;}
-->
</style>
</head>
<body lang=3DEN-GB link=3Dblue vlink=3Dpurple>
<div class=3DWordSection1>
<table class=3DMsoNormalTable border=3D0 cellspacing=3D0 cellpadding=3D0 wi=
dth=3D619
style=3D'width:464.25pt;border-collapse:collapse'>
<tr>
<td width=3D123 valign=3Dtop style=3D'width:92.4pt;padding:0cm 0cm 0cm 0c=
m'>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;lin=
e-height:
normal'><span style=3D'font-size:10.0pt'>Document number:</span></p>
</td>
<td width=3D496 style=3D'width:371.85pt;padding:0cm 0cm 0cm 0cm'></td>
</tr>
<tr>
<td width=3D123 valign=3Dtop style=3D'width:92.4pt;padding:0cm 0cm 0cm 0c=
m'>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;lin=
e-height:
normal'><span style=3D'font-size:10.0pt'>Date:</span></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;lin=
e-height:
normal'><span style=3D'font-size:10.0pt'>Revises:</span></p>
</td>
<td width=3D496 style=3D'width:371.85pt;padding:0cm 0cm 0cm 0cm'>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;lin=
e-height:
normal'><span style=3D'font-size:10.0pt'>2013-09-21</span></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;lin=
e-height:
normal'><span style=3D'font-size:10.0pt'>N3702</span></p>
</td>
</tr>
<tr>
<td width=3D123 valign=3Dtop style=3D'width:92.4pt;padding:0cm 0cm 0cm 0c=
m'>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;lin=
e-height:
normal'><span style=3D'font-size:10.0pt'>Project:</span></p>
</td>
<td width=3D496 style=3D'width:371.85pt;padding:0cm 0cm 0cm 0cm'>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;lin=
e-height:
normal'><span style=3D'font-size:10.0pt'>Programming Language C++, Librar=
y
Working Group</span></p>
</td>
</tr>
<tr>
<td width=3D123 valign=3Dtop style=3D'width:92.4pt;padding:0cm 0cm 0cm 0c=
m'>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;lin=
e-height:
normal'><span style=3D'font-size:10.0pt'>Reply-to:</span></p>
</td>
<td width=3D496 style=3D'width:371.85pt;padding:0cm 0cm 0cm 0cm'>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;lin=
e-height:
normal'><span style=3D'font-size:10.0pt'>Mikhail Semenov<<span
class=3Dunsafesenderemail1><span style=3D'color:black'>mikhailsemenov1957=
@gmail.com</span></span>></span></p>
</td>
</tr>
</table>
<h1> </h1>
<h1 align=3Dcenter style=3D'text-align:center'><span style=3D'font-size:15.=
0pt;
line-height:115%'>Introducing an optional parameter for </span><strong><spa=
n
style=3D'font-size:15.0pt;line-height:115%'>mem_fn</span></strong><span
style=3D'font-size:15.0pt;line-height:115%'>, which allows to bind an objec=
t to
its member function</span></h1>
<h2 style=3D'margin-left:36.0pt;text-indent:-18.0pt'>1.<span style=3D'font-=
size:
7.0pt;line-height:115%'> </span>Introduction</h2>
<p class=3DMsoNormal>When a member function is used as a parameter to anoth=
er
function (the latter is usually called a <b><i>functional</i></b>) it is of=
ten
necessary to provide the corresponding class object as a parameter as well.=
But
functionals, like for example an integral, are often written to accept one
global function. In cases when a member function and an object are needed, =
it
is necessary to bind them together, so that the result can be supplie=
d to
the corresponding functional as one parameter. Let us consider the followin=
g
functional <b>integrate </b>(it can be part of a library): </p>
<p class=3DMsoNormal><strong><span lang=3DFR>double
integrate(std::function<double(double, double, double, double, double)&g=
t;
f,</span></strong></p>
<p class=3DMsoNormal><strong><span lang=3DFR> =
&nb=
sp;
double x1, double x2, double y1, double y2, double z1, double z2, dou=
ble
a1, double a2, double b1, double b2) ;</span></strong></p>
<p class=3DMsoNormal>We need to call <b>integrate</b> with the
parameterized function <b>fa</b>, which is defined as a member of the class=
<b>A</b>:</p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><str=
ong>class
A</strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><str=
ong>{</strong></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'><strong> double p;</strong></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'><strong> </strong></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'><strong>public:</strong></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'><strong> A(double p1):p(p1) {}</s=
trong></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'><strong> void set_param(double p1=
)
{ p =3D p1; }</strong></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'><strong> double fa(double x, doub=
le
y, double z, double a, double b);</strong></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'><strong>};</strong></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'> </p>
<p class=3DMsoNormal>The member-variable <b>p</b> is a "hidden&q=
uot;
parameter of the function <b>fa</b>. We create an object:</p>
<p class=3Decxmsonormal style=3D'background:white'><strong><span style=3D'f=
ont-size:
11.0pt'>A a(5.0);</span></strong></p>
<p class=3Decxmsonormal style=3D'background:white'>If we want to call <b>in=
tegrate</b>
with <b>a.fa</b> we have three options:</p>
<p class=3Decxmsonormal style=3D'margin-top:0cm;margin-right:0cm;margin-bot=
tom:
0cm;margin-left:36.0pt;margin-bottom:.0001pt;text-indent:-18.0pt;background=
:
white'><strong><span style=3D'font-weight:normal'>(1)</span></strong><stron=
g><span
style=3D'font-size:7.0pt;font-family:"Times New Roman","serif"'>  =
; </span>double
r =3D </strong><strong><span style=3D'font-size:10.5pt;font-family:"Segoe U=
I","sans-serif";
color:black'> </span>integrate(std::bind(&A::fa, &a, _1, _2, _=
3,
_4, _5), x1, x2, y1,y2, z1, z2, </strong></p>
<p class=3Decxmsonormal style=3D'margin-top:0cm;margin-right:0cm;margin-bot=
tom:
0cm;margin-left:36.0pt;margin-bottom:.0001pt;background:white'><strong>&nbs=
p; &=
nbsp; &nbs=
p;
a1, a2, b1, b2);</strong></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'><strong> </strong></p>
<p class=3Decxmsonormal style=3D'margin-top:0cm;margin-right:0cm;margin-bot=
tom:
0cm;margin-left:36.0pt;margin-bottom:.0001pt;text-indent:-18.0pt;background=
:
white'><strong><span style=3D'font-weight:normal'>(2)</span></strong><stron=
g><span
style=3D'font-size:7.0pt;font-family:"Times New Roman","serif";font-weight:=
normal'>
</span></strong><span style=3D'font-size:10.5pt;font-family:"Segoe UI","san=
s-serif";
color:black'> </span><strong>double r =3D integrate</strong></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'><strong> &=
nbsp;
</strong><strong><span lang=3DFR>([&a](double x, double y, double z, do=
uble
a, double b) { return a.fa(x, y, z, a, b);}, =
</span></strong></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'><strong><span lang=3DFR> &nb=
sp;
x1, x2, y1, y2, z1, z2, a1, a2, b1, b2); </span></strong></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'><strong><span lang=3DFR> </span></strong></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'><strong><span lang=3DFR> </=
span></strong><strong><span
style=3D'font-weight:normal'>(3)</span> </strong><strong><span
style=3D'font-weight:normal'>define a global function (a wrapper), which we=
will
use as a parameter to the function </span>integrate</strong><strong><=
span
style=3D'font-weight:normal'>:</span></strong></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'><strong> &=
nbsp; &nbs=
p;
double f(double x, double y, double z, double a, double b) { return
a.fa(x,y,z,a,b); }</strong></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'><strong> &=
nbsp;
=85</strong></p>
<p class=3Decxmsonormal style=3D'margin-top:0cm;margin-right:0cm;margin-bot=
tom:
0cm;margin-left:36.0pt;margin-bottom:.0001pt;text-indent:-18.0pt;background=
:
white'><strong> double r =
=3D
integrate(f, x1, x2, y1, y2, z1, z2, a1, a2, b1, b2);</strong></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'><strong> </stro=
ng></p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'>In all these examples, if the function <b>fa</b> had more
parameters we would have to write even a longer statement. </p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'> </p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
background:white'>It would be much more convenient to be able to write
something like this:</p>
<p class=3Decxmsonormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;
line-height:150%;background:white'><strong>double r =3D integrate(<i>some_b=
inder</i>(&A::fa,
&a), x1, x2, y1, y2, z1, z2, a1, a2, b1, b2); </strong></p>
<p class=3DMsoNormal><strong><span style=3D'font-family:"Times New Roman","=
serif";
font-weight:normal'>which looks more simple and clearer</span></strong><str=
ong><span
style=3D'font-family:SimSun;font-weight:normal'>.</span></strong></p>
<h2 style=3D'margin-left:36.0pt;text-indent:-18.0pt'>2.<span style=3D'font-=
size:
7.0pt;line-height:115%'> </span>Proposal</h2>
<p class=3DMsoNormal>The proposal is to allow <b>mem_fn</b> to accept a sec=
ond,
optional parameter. The full definition is as follows (the first option is =
the
same as in <b>N3690, </b>section<b> 20.10.10</b>):</p>
<p class=3DMsoNormal style=3D'margin-left:14.2pt'><strong><span style=3D'fo=
nt-size:
11.0pt;line-height:115%;font-family:Consolas'>template<class R, class T&=
gt;
unspecified mem_fn(R T::* pm);</span></strong></p>
<p class=3DMsoNormal style=3D'margin-left:14.2pt'><strong><i><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>Returns:</span></i></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> A simple call wrapper (20.10.1) </span></strong><stron=
g><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>fn</span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> such that the expression </span></strong><span
class=3DIntenseQuoteChar><span style=3D'font-size:11.0pt;line-height:115%;
font-family:"Times New Roman","serif"'>fn(t, a2, ..., aN)</span></span><str=
ong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> is equivalent to </span></strong><span
class=3DIntenseQuoteChar><span style=3D'font-size:11.0pt;line-height:115%;
font-family:"Times New Roman","serif"'>INVOKE (pm, t, a2, ..., aN)</span></=
span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> (20.10.2). </span></strong><span class=3DIntenseQuoteC=
har><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>fn
</span></span><strong><span style=3D'font-size:11.0pt;line-height:115%;
font-family:"Times New Roman","serif";font-weight:normal'>shall have a nest=
ed
type </span></strong><span class=3DIntenseQuoteChar><span style=3D'font-siz=
e:11.0pt;
line-height:115%;font-family:"Times New Roman","serif"'>result_type</span><=
/span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> that is a synonym for the return type of </span></stro=
ng><span
class=3DIntenseQuoteChar><span style=3D'font-size:11.0pt;line-height:115%;
font-family:"Times New Roman","serif"'>pm</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> when </span></strong><span class=3DIntenseQuoteChar><s=
pan
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>pm</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> is a pointer to member function.</span></strong></p>
<p class=3DMsoNormal style=3D'margin-left:14.2pt'><strong><span style=3D'fo=
nt-size:
11.0pt;line-height:115%;font-family:"Times New Roman","serif";font-weight:n=
ormal'>The
simple call wrapper shall define two nested types named </span></strong><st=
rong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>argument_type</span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> and </span></strong><strong><span style=3D'font-size:1=
1.0pt;
line-height:115%;font-family:"Times New Roman","serif"'>result_type</span><=
/strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> as synonyms for </span></strong><strong><i><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>cv</span></i></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> </span></strong><strong><span style=3D'font-size:11.0p=
t;
line-height:115%;font-family:"Times New Roman","serif"'>T*</span></strong><=
strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> and </span></strong><strong><span style=3D'font-size:1=
1.0pt;
line-height:115%;font-family:"Times New Roman","serif"'>Ret</span></strong>=
<strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'>, respectively, when </span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>pm</span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> is a pointer to member function with <i>cv-</i>qualifi=
er </span></strong><strong><i><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>cv</span></i></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> and taking no arguments, where </span></strong><span
class=3DIntenseQuoteChar><i><span style=3D'font-size:11.0pt;line-height:115=
%;
font-family:"Times New Roman","serif"'>Ret</span></i></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> is </span></strong><span class=3DIntenseQuoteCha=
r><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>pm</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'>=92s return type.</span></strong></p>
<p class=3DMsoNormal style=3D'margin-left:14.2pt'><strong><span style=3D'fo=
nt-size:
11.0pt;line-height:115%;font-family:"Times New Roman","serif";font-weight:n=
ormal'>The
simple call wrapper shall define three nested types named </span></strong><=
span
class=3DIntenseQuoteChar><span style=3D'font-size:11.0pt;line-height:115%;
font-family:"Times New Roman","serif"'>first_argument_type</span></span><st=
rong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'>, </span></strong><span class=3DIntenseQuoteChar><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>second_argument_type</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'>, and </span></strong><span class=3DIntenseQuoteChar><s=
pan
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>result_type</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> as synonyms for </span></strong><span
class=3DIntenseQuoteChar><i><span style=3D'font-size:11.0pt;line-height:115=
%;
font-family:"Times New Roman","serif"'>cv</span></i></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>
</span></strong><span class=3DIntenseQuoteChar><span style=3D'font-size:11.=
0pt;
line-height:115%;font-family:"Times New Roman","serif"'>T*</span></span><st=
rong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>,
</span></strong><span class=3DIntenseQuoteChar><span style=3D'font-size:11.=
0pt;
line-height:115%;font-family:"Times New Roman","serif"'>T1</span></span><st=
rong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>,</span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> and </span></strong><span class=3DIntenseQuoteChar><sp=
an
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>Ret</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'>, respectively, when </span></strong><span
class=3DIntenseQuoteChar><span style=3D'font-size:11.0pt;line-height:115%;
font-family:"Times New Roman","serif"'>pm</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> is a pointer to member function with </span></strong><=
span
class=3DQuoteChar><b><span style=3D'font-size:11.0pt;line-height:115%;font-=
family:
"Times New Roman","serif"'>cv-</span></b></span><strong><span style=3D'font=
-size:
11.0pt;line-height:115%;font-family:"Times New Roman","serif";font-weight:n=
ormal'>qualifier
</span></strong><span class=3DIntenseQuoteChar><i><span style=3D'font-size:=
11.0pt;
line-height:115%;font-family:"Times New Roman","serif"'>cv</span></i></span=
><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> and taking one argument of type </span></strong><span
class=3DIntenseQuoteChar><span style=3D'font-size:11.0pt;line-height:115%;
font-family:"Times New Roman","serif"'>T1</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'>, where </span></strong><span class=3DIntenseQuoteChar>=
<i><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>Ret</span></i></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> is </span></strong><span class=3DIntenseQuoteChar><spa=
n
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>pm</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'>=92s return type.</span></strong></p>
<p class=3DMsoNormal style=3D'margin-left:14.2pt'><strong><i><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>Throws:
</span></i></strong><strong><span style=3D'font-size:11.0pt;line-height:115=
%;
font-family:"Times New Roman","serif";font-weight:normal'>Nothing</span></s=
trong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Trebuchet MS","sans=
-serif";
font-weight:normal'>.</span></strong></p>
<p class=3DMsoNormal style=3D'margin-top:0cm;margin-right:46.8pt;margin-bot=
tom:
0cm;margin-left:14.2pt;margin-bottom:.0001pt;line-height:normal'><b><span
style=3D'font-size:11.0pt;font-family:Consolas'>template<class R, class =
T,
class ObjT, class =85 Arg> </span></b></p>
<p class=3DMsoNormal style=3D'margin-top:0cm;margin-right:46.8pt;margin-bot=
tom:
0cm;margin-left:14.2pt;margin-bottom:.0001pt;line-height:normal'><b><span
style=3D'font-size:11.0pt;font-family:Consolas'> &nb=
sp; =
unspecified mem_fn(R T::* pm, ObjT obj);</span></b></p>
<p class=3DMsoNormal style=3D'margin-top:0cm;margin-right:46.8pt;margin-bot=
tom:
0cm;margin-left:14.2pt;margin-bottom:.0001pt;line-height:normal'><b><i><spa=
n
style=3D'font-size:11.0pt'> </span></i></b></p>
<p class=3DMsoNormal style=3D'margin-top:0cm;margin-right:46.8pt;margin-bot=
tom:
0cm;margin-left:14.2pt;margin-bottom:.0001pt;line-height:normal'><b><i><spa=
n
style=3D'font-size:11.0pt'>Requires: </span></i></b><b><span style=3D'font-=
size:
11.0pt;font-family:Consolas'>ObjT </span></b><span style=3D'font-size:11.0p=
t;
font-family:Consolas'>is<b> CopyConstructible</b>.</span></p>
<p class=3DMsoNormal style=3D'margin-top:0cm;margin-right:46.8pt;margin-bot=
tom:
0cm;margin-left:14.2pt;margin-bottom:.0001pt;line-height:normal'> </p>
<p class=3DMsoNormal style=3D'margin-left:14.2pt'><strong><i><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>Returns:</span></i></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> A simple call wrapper (20.10.1) </span></strong><span
class=3DIntenseQuoteChar><span style=3D'font-size:11.0pt;line-height:115%;
font-family:"Times New Roman","serif"'>fn</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> such that the expression </span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>fn(a1,
...., aN)</span></strong><strong><span style=3D'font-size:11.0pt;line-height=
:115%;
font-family:"Times New Roman","serif";font-weight:normal'> is equivalent to=
</span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>INVOKE(pm,
obj, a1,=85aN)</span></strong><strong><span style=3D'font-size:11.0pt;line-=
height:
115%;font-family:"Times New Roman","serif";font-weight:normal'>. </span></s=
trong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>fn</span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> shall have a nested type </span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>result_type</span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> that is a synonym for the return type of </span></stro=
ng><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>pm</span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> when </span></strong><strong><span style=3D'font-size:=
11.0pt;
line-height:115%;font-family:"Times New Roman","serif"'>pm</span></strong><=
strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> is a pointer to member function.</span></strong></p>
<p class=3DMsoNormal style=3D'margin-left:14.2pt'><strong><span style=3D'fo=
nt-size:
11.0pt;line-height:115%;font-family:"Times New Roman","serif";font-weight:n=
ormal'>The
simple call wrapper shall define one nested type named </span></strong><str=
ong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>result_type</span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> as a synonym for </span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>Ret</span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'>, where </span></strong><span class=3DIntenseQuoteChar>=
<i><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>Ret</span></i></span><span
class=3DIntenseQuoteChar><i><span style=3D'font-size:11.0pt;line-height:115=
%;
font-family:"Times New Roman","serif";font-weight:normal'> </span></i></spa=
n><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> is </span></strong><span class=3DIntenseQuoteChar=
><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>pm</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'>=92s return type.</span></strong></p>
<p class=3DMsoNormal style=3D'margin-left:14.2pt'><strong><span style=3D'fo=
nt-size:
11.0pt;line-height:115%;font-family:"Times New Roman","serif";font-weight:n=
ormal'>The
simple call wrapper shall define two nested types named </span></strong><st=
rong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>argument_type
</span></strong><strong><span style=3D'font-size:11.0pt;line-height:115%;
font-family:"Times New Roman","serif";font-weight:normal'>and </span></stro=
ng><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>result_type</span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> as synonyms for </span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>T1</span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> and </span></strong><strong><span style=3D'font-size:1=
1.0pt;
line-height:115%;font-family:"Times New Roman","serif"'>Ret</span></strong>=
<strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'>, respectively, when </span></strong><span
class=3DIntenseQuoteChar><span style=3D'font-family:"Times New Roman","seri=
f"'>pm</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> is a pointer to member function taking one argum=
ent
of type </span></strong><span class=3DIntenseQuoteChar><span style=3D'font-=
family:
"Times New Roman","serif"'>T1</span></span><strong><span style=3D'font-size=
:11.0pt;
line-height:115%;font-family:"Times New Roman","serif";font-weight:normal'>=
,
where </span></strong><span class=3DIntenseQuoteChar><i><span style=3D'font=
-size:
11.0pt;line-height:115%;font-family:"Times New Roman","serif"'>Ret</span></=
i></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> is </span></strong><span class=3DIntenseQuoteChar><spa=
n
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>pm</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'>=92s return type.</span></strong></p>
<p class=3DMsoNormal style=3D'margin-left:14.2pt'><strong><span style=3D'fo=
nt-size:
11.0pt;line-height:115%;font-family:"Times New Roman","serif";font-weight:n=
ormal'>The
simple call wrapper shall define three nested types named </span></strong><=
span
class=3DIntenseQuoteChar><span style=3D'font-size:11.0pt;line-height:115%;
font-family:"Times New Roman","serif"'>first_argument_type</span></span><st=
rong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'>, </span></strong><span class=3DIntenseQuoteChar><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>second_argument_type</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'>, and </span></strong><span class=3DIntenseQuoteChar><s=
pan
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>result_type</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> as synonyms for </span></strong><span
class=3DIntenseQuoteChar><span style=3D'font-size:11.0pt;line-height:115%;
font-family:"Times New Roman","serif"'>T1</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>,
</span></strong><span class=3DIntenseQuoteChar><span style=3D'font-size:11.=
0pt;
line-height:115%;font-family:"Times New Roman","serif"'>T2</span></span><st=
rong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>,</span></strong><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> and </span></strong><span class=3DIntenseQuoteChar><sp=
an
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>Ret</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'>, respectively, when </span></strong><span
class=3DIntenseQuoteChar><span style=3D'font-size:11.0pt;line-height:115%;
font-family:"Times New Roman","serif"'>pm</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> is a pointer to member function taking two arguments o=
f
types </span></strong><span class=3DIntenseQuoteChar><span style=3D'font-si=
ze:11.0pt;
line-height:115%;font-family:"Times New Roman","serif"'>T1</span></span><sp=
an
class=3DIntenseQuoteChar><span style=3D'font-size:11.0pt;line-height:115%;
font-family:"Times New Roman","serif";font-weight:normal'> and </span=
></span><span
class=3DIntenseQuoteChar><span style=3D'font-size:11.0pt;line-height:115%;
font-family:"Times New Roman","serif"'>T2</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'>, where </span></strong><span class=3DIntenseQuoteChar>=
<i><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>Ret</span></i></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> is </span></strong><span class=3DIntenseQuoteChar><spa=
n
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>pm</span></span><strong><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'>=92s return type.</span></strong></p>
<p class=3DMsoNormal style=3D'margin-left:14.2pt'><strong><i><span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif"'>Throws:
</span></i></strong><strong><span style=3D'font-size:11.0pt;line-height:115=
%;
font-family:"Times New Roman","serif";font-weight:normal'>Nothing unless th=
e
evaluation of </span></strong><strong><span style=3D'font-size:11.0pt;line-=
height:
115%;font-family:"Times New Roman","serif"'>obj</span></strong><strong><spa=
n
style=3D'font-size:11.0pt;line-height:115%;font-family:"Times New Roman","s=
erif";
font-weight:normal'> throws</span></strong><strong><span style=3D'font-size=
:11.0pt;
line-height:115%;font-family:"Times New Roman","serif"'>.</span></strong></=
p>
<p class=3DMsoNormal><strong><span style=3D'font-family:"Times New Roman","=
serif";
font-weight:normal'>The second option means that the object and the member =
function
will be bound together. Using this feature we can now write the follo=
wing
code (the class and the function used here were explained in the introducti=
on):</span></strong></p>
<p class=3DMsoQuote style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-h=
eight:
normal'><strong><span style=3D'font-style:normal'>double x =3D 1.0;</span><=
/strong></p>
<p class=3DMsoQuote style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-h=
eight:
normal'><strong><span style=3D'font-style:normal'>double sum =3D 0.0;</span=
></strong></p>
<p class=3DMsoQuote style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-h=
eight:
normal'><strong><span style=3D'font-style:normal'>for (int i =3D 0; i < =
10; i++)</span></strong></p>
<p class=3DMsoQuote style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-h=
eight:
normal'><strong><span style=3D'font-style:normal'>{</span></strong></p>
<p class=3DMsoQuote style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-h=
eight:
normal'><strong><span style=3D'font-style:normal'> a.set_param(=
x);</span></strong></p>
<p class=3DMsoQuote style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-h=
eight:
normal'><strong><span style=3D'font-style:normal'> sum +=3D
integrate(mem_fn(&A::fa, &a), x1, x2, y1, y2, z1, z2, a1, a2, b1, b=
2);
// summing up ten values</span></strong></p>
<p class=3DMsoQuote style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-h=
eight:
normal'><strong><span style=3D'font-style:normal'> x +=3D 0.1;<=
/span></strong></p>
<p class=3DMsoQuote style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-h=
eight:
normal'><strong><span style=3D'font-style:normal'>}</span></strong></p>
<h2>Examples</h2>
<h3><u>Example 1.</u></h3>
<p class=3DMsoNormal>Here is a sample program, which shows the application
of <b>mem_fn</b> to simple member functions, and also its use with a =
shared
pointer as the second parameter:</p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>cla=
ss A2</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>{</=
span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
int i;</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>pub=
lic:
</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
A2(int k):i(k) {}</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
auto get()const ->int { return i;} </span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
auto getv() volatile ->int { return i;} </=
span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
auto set(int v)->void { i =3D v;}</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
auto inc(int g)->int& { i+=3Dg; return i;}</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
auto incp(int& g)->int& { g+=3Di; return g;}</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
auto f8 (int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) co=
nst
-> int</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
{</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
return i+a1+a2+a3+a4+a5+a6+a7+a8;</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
} </span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>};<=
/span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>int
main()</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>{</=
span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
A2 a(11); </span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
auto get2 =3D std::mem_fn(&A2::get,a); </span></b></p=
>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
std::cout << get2() << std::endl; </span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
{</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
A2 b(25);</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
get2 =3D std::mem_fn(&A2::get, b);</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
} </span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
std::cout << get2() << std::endl; </span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
auto a_get1 =3D std::mem_fn(&A2::get);</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
std::cout << a_get1(&a) << std::endl;</span></b=
></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
auto set1 =3D std::mem_fn(&A2::set, &a);</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
std::shared_ptr<A2> sh_a(new A2(22));</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
auto inc =3D std::mem_fn(&A2::inc, sh_a);</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
auto incp =3D std::mem_fn(&A2::incp, sh_a); </span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
auto af8 =3D std::mem_fn(&A2::f8,sh_a);</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
auto b_af8 =3D std::bind(&A2::f8, sh_a, _1, _2, _3, _4, _5, _6, _7,
_8); </span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp; =
&nb=
sp;
</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
set1(15);</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
std::cout << "a.get():" << a.get() <<
std::endl; </span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
auto sh_get =3D std::mem_fn(&A2::get,sh_a);</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
std::cout << "sh_get:" << sh_get() <<
std::endl; </span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
int x =3D 5;</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
int k =3D inc(x);</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
int& k2 =3D incp(x);</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
k2 *=3D 7;</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
std::cout << "a.get():" << a.get() << std::endl=
;</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
std::cout << "k: " << k << std::endl;</span></b=
></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
std::cout << "x: " << x << std::endl;</span></b=
></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
std::cout << "af8(1,2,3,4,5,6,7,8): " <<
af8(1,2,3,4,5,6,7,8) << std::endl; </span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
std::cout << "b_af8(1,2,3,4,5,6,7,8): " <<
b_af8(1,2,3,4,5,6,7,8) << std::endl;</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
A2 av(45);</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
auto getv =3D std::mem_fn(&A2::getv,av); &=
nbsp; </span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
std::cout << getv() << std::endl;</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
auto getv2 =3D
std::mem_fn(&A2::getv,&av); </s=
pan></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><b><=
span
style=3D'font-size:11.0pt;line-height:115%;font-family:"Anonymous Pro"'>&nb=
sp;
std::cout << getv2() << std::endl;</span></b></p>
<p class=3DMsoNormal><b><span style=3D'font-size:11.0pt;line-height:115%;
font-family:"Anonymous Pro"'>}</span></b></p>
<p class=3DMsoNormal>This program will print:</p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><spa=
n
class=3DMsoIntenseEmphasis>11</span></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><spa=
n
class=3DMsoIntenseEmphasis>25</span></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><spa=
n
class=3DMsoIntenseEmphasis>11</span></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><spa=
n
class=3DMsoIntenseEmphasis>a.get():15</span></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><spa=
n
class=3DMsoIntenseEmphasis>sh_get:22</span></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><spa=
n
class=3DMsoIntenseEmphasis>a.get():15</span></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><spa=
n
class=3DMsoIntenseEmphasis>k: 27</span></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><spa=
n
class=3DMsoIntenseEmphasis>x: 224</span></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><spa=
n
class=3DMsoIntenseEmphasis>af8(1,2,3,4,5,6,7,8): 63</span></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><spa=
n
class=3DMsoIntenseEmphasis>b_af8(1,2,3,4,5,6,7,8): 63</span></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><spa=
n
class=3DMsoIntenseEmphasis>45</span></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt'><spa=
n
class=3DMsoIntenseEmphasis>45 </span></p>
<h3><span class=3DMsoIntenseEmphasis><u>Example 2.</u></span></h3>
<p class=3DMsoNormal>This program shows how to apply <b>mem_fn</b> to=
overloaded member functions:</p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"'>#in=
clude
<iostream></span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"'>#in=
clude
<functional></span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"'>#in=
clude
<vector></span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'> </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>class
B</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>{</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
double x;</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
std::vector<double> y;</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span lang=3DFR style=3D'font-size:11.0pt;font-family:"Anon=
ymous Pro"'>public:</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span lang=3DFR style=3D'font-size:11.0pt;font-family:"Anon=
ymous Pro"'>
B(double x1):x(x1),y(3) </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span lang=3DFR style=3D'font-size:11.0pt;font-family:"Anon=
ymous Pro"'>
</span></strong><strong><span style=3D'font-size:11.0pt;font-family:"Anonym=
ous Pro"'>{</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
y[0] =3D 1.5;</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
y[1] =3D 2.7;</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
y[2] =3D 4.9;</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
}</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
std::vector<double> add_vector(std::vector<double>&& z)=
</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
{ </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
std::cout << "move" << std::endl; <=
/span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
for (int i =3D 0; i < 3; i++)</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
{</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
z[i] +=3D y[i];</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
}</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
return std::move(z);</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
}</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'> </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'> </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'> </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
std::vector<double> add_vector(const std::vector<double>& z=
)
const</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
{ </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
std::cout << "copy" << std::endl; <=
/span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
std::vector<double> c(z); </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
for (int i =3D 0; i < 3; i++)</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
{</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
c[i] +=3D y[i];</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
}</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
return c;</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
}</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
void add_vector(std::vector<double>& z)</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
{ </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
std::cout << "out" <<
std::endl;  =
; </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
for (int i =3D 0; i < 3; i++)</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
{</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
z[i] +=3D y[i];</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
} </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>
}</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>};</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'> </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>int
main()</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>{=A0=A0=A0
</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
B b(3.5);</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0 </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
std::vector<double> v(3);</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
v[0] =3D 10.0;</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
v[1] =3D 100.0;</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
v[2] =3D 1000.0;=A0=A0 </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0 </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
auto b_add_vector_copy =3D
std::mem_fn(static_cast<std::vector<double>(B::*)(const
std::vector<double>&) const>(&B::add_vector), &b); </s=
pan></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0 </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
std::vector<double> v1 =3D b_add_vector_copy(v); </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
std::cout << "v.size(): " << v.size() << std::e=
ndl;</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
for (int i =3D 0; i < 3; i++)</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
{</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0=A0=A0=A0=A0
std::cout << "v1: " << v1[i] << std::endl;</spa=
n></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
}</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0=A0=A0=A0
</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
auto b_add_vector_move =3D
std::mem_fn(static_cast<std::vector<double>(B::*)(std::vector<d=
ouble>&&)>(&B::add_vector),&b);</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
std::vector<double> v2 =3D b_add_vector_move(std::move(v));</span></s=
trong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
std::cout << "v.size(): " << v.size() << std::e=
ndl;
// v size is now 0</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
for (int i =3D 0; i < 3; i++)</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
{</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0=A0=A0=A0=A0
std::cout << "v2: " << v2[i] << std::endl;</spa=
n></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
}</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'> </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
std::vector<double> v3(3);</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
v3[0] =3D 10.0;</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
v3[1] =3D 100.0;</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
v3[2] =3D 1000.0;=A0=A0=A0 </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0 </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0 </span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
auto b_add_vector_ref =3D std::mem_fn(static_cast<void(B::*)(std::vector=
<double>&)>(&B::add_vector),&b);</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
b_add_vector_ref(v3);</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
for (int i =3D 0; i < 3; i++)</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
{</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0=A0=A0=A0=A0
std::cout << "v3: " << v3[i] << std::endl;</spa=
n></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>=A0=A0=A0
}</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'>}</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-size:11.0pt;font-family:"Anonymous Pro"=
'> </span></strong></p>
<p class=3DMsoNormal><strong><span style=3D'font-family:"Times New Roman","=
serif";
font-weight:normal'>This program will print:</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-family:"Trebuchet MS","sans-serif"'>cop=
y</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-family:"Trebuchet MS","sans-serif"'>v.s=
ize():
3</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-family:"Trebuchet MS","sans-serif"'>v1:=
11.5</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-family:"Trebuchet MS","sans-serif"'>v1:=
102.7</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-family:"Trebuchet MS","sans-serif"'>v1:
1004.9</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-family:"Trebuchet MS","sans-serif"'>mov=
e</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-family:"Trebuchet MS","sans-serif"'>v.s=
ize():
0</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-family:"Trebuchet MS","sans-serif"'>v2:=
11.5</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-family:"Trebuchet MS","sans-serif"'>v2:=
102.7</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-family:"Trebuchet MS","sans-serif"'>v2:
1004.9</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-family:"Trebuchet MS","sans-serif"'>out=
</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-family:"Trebuchet MS","sans-serif"'>v3:=
11.5</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-family:"Trebuchet MS","sans-serif"'>v3:=
102.7</span></strong></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><strong><span style=3D'font-family:"Trebuchet MS","sans-serif"'>v3:
1004.9</span></strong></p>
<p class=3DMsoNormal> </p>
<h2 style=3D'margin-left:36.0pt;text-indent:-18.0pt'>3.<span style=3D'font-=
size:
7.0pt;line-height:115%'> </span>Implementation</h2>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>namespace =
std</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>{</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>#define
_getRef1(_SIG, _NAME)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>template
<class _P, class _R, class _T, class ... _A>\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>typename
std::enable_if<std::is_convertible<_SIG _P&,_SIG _T&>::val=
ue,
_SIG _T&>::type \</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_getRef ##
_NAME(_R (_T::*f)(_A ...) _SIG, _SIG _P& x)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>{\</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
return
static_cast<_SIG _T&>(x);\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>}</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>#define
_getRef2(_SIG, _NAME)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>template
<class _P, class _R, class _T, class ... _A>\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>typename
std::enable_if<std::is_convertible<_SIG typename _P::element_type&=
;,
_SIG _T&>::value, _SIG _T&>::type \</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_getRef ##=
_NAME(_R
(_T::*f)(_A ...) _SIG, _SIG _P& x)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>{\</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
return
static_cast<_SIG _T&>(*x);\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>}</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>#define
_getRef3(_SIG, _NAME)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>template
<class _P, class _R, class _T, class ... _A>\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>typename
std::enable_if<std::is_convertible<_P* _SIG, _T* _SIG>::value, _SI=
G
_T&>::type \</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0_getRef=
##
_NAME(_R (_T::*f)(_A ...) _SIG, _P* _SIG x)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>{\</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
return
*static_cast<_T* _SIG>(x);\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>}</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_getRef1(,=
_simple)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_getRef1(c=
onst,_const)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_getRef1(c=
onst
volatile,_const_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_getRef1(v=
olatile,_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_getRef2(,=
_simple)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_getRef2(c=
onst,_const)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_getRef2(c=
onst
volatile,_const_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_getRef2(v=
olatile,_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_getRef3(,=
_simple)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_getRef3(c=
onst,_const)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_getRef3(c=
onst
volatile,_const_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_getRef3(v=
olatile,_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>#define
_two_param_delegate2(_SIG, _NAME)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>template&l=
t;class
_OBJECT1, class _T, class _R, class _Arg1, class _Arg2, class ... _Arg>\=
</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>class _del=
egate2
## _NAME\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>{\</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
_OBJECT1
_obj;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
_R
(_T::*f1)(_Arg1, _Arg2, _Arg ... ) _SIG;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>public:\</=
span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
typedef
_Arg1 first_argument_type;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
typedef
_Arg2 second_argument_type;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
typedef _R
return_type;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>\</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
_delegate2
## _NAME(_R (_T::*_fx)(_Arg1, _Arg2, _Arg ... ) _SIG, _OBJECT1
_obj1):_obj(_obj1),f1(_fx)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
{\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
} \</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>\</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
_R operator()(_Arg1
_x1, _Arg2 _x2, _Arg ...=A0 _x) _SIG\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
{\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0=
=A0=A0=A0=A0 return
(_getRef ## _NAME(f1, _obj).*f1)(std::forward<_Arg1>(_x1),
std::forward<_Arg2>(_x2), std::forward<_Arg>(_x) ...);\</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
}\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>};</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_two_param=
_delegate2(,_simple)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_two_param=
_delegate2(const,
_const)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_two_param=
_delegate2(const
volatile, _const_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_two_param=
_delegate2(volatile,
_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>#define
_two_param_delegate1(_SIG, _NAME)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>template&l=
t;class
_OBJECT1, class _T, class _R, class _Arg1>\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>class _del=
egate1
## _NAME\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>{\</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
_OBJECT1
_obj;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
</span></b><b><span
lang=3DFR style=3D'font-size:10.0pt;font-family:Consolas'>_R (_T::*f1)(_Arg=
1)
_SIG;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span lang=3DFR style=3D'font-size:10.0pt;font-family:Consolas'>=
public:\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span lang=3DFR style=3D'font-size:10.0pt;font-family:Consolas'>=
=A0=A0=A0 </span></b><b><span
style=3D'font-size:10.0pt;font-family:Consolas'>typedef _Arg1 argument_type=
;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
typedef _R
return_type;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>\</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
_delegate1
## _NAME(_R (_T::*_fx)(_Arg1) _SIG, _OBJECT1 _obj1):_obj(_obj1),f1(_fx)\</s=
pan></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
{\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
} \</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>\</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
_R
operator()(_Arg1 _x1) _SIG\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
{\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0=
=A0=A0=A0=A0 return
(_getRef=A0 ## _NAME(f1, _obj).*f1)(std::forward<_Arg1>(_x1));\</span=
></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
}\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>};</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_two_param=
_delegate1(,_simple)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_two_param=
_delegate1(const,
_const)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_two_param=
_delegate1(const
volatile, _const_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_two_param=
_delegate1(volatile,
_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>#define
_two_param_delegate0(_SIG, _NAME)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>template&l=
t;class
_OBJECT1, class _T, class _R>\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>class _del=
egate0
## _NAME\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>{\</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
_OBJECT1
_obj;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
</span></b><b><span
lang=3DFR style=3D'font-size:10.0pt;font-family:Consolas'>_R (_T::*f1)() _S=
IG;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span lang=3DFR style=3D'font-size:10.0pt;font-family:Consolas'>=
public:\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span lang=3DFR style=3D'font-size:10.0pt;font-family:Consolas'>=
=A0=A0=A0 </span></b><b><span
style=3D'font-size:10.0pt;font-family:Consolas'>typedef _R return_type;\</s=
pan></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>\</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
_delegate0
## _NAME(_R (_T::*_fx)() _SIG, _OBJECT1 _obj1):_obj(_obj1),f1(_fx)\</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
{\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
} \</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>\</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
_R
operator()() _SIG\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
{\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0=
=A0=A0=A0=A0 return
(_getRef=A0 ## _NAME(f1, _obj).*f1)();\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
}\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>};</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_two_param=
_delegate0(,_simple)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_two_param=
_delegate0(const,
_const)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_two_param=
_delegate0(const
volatile, _const_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_two_param=
_delegate0(volatile,
_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>#define
_one_param_delegate1(_SIG, _NAME)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>template&l=
t;class
_T, class _R, class _Arg1, class ... _Arg>\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>class
_one_p_delegate1 ## _NAME\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span lang=3DFR style=3D'font-size:10.0pt;font-family:Consolas'>=
{\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span lang=3DFR style=3D'font-size:10.0pt;font-family:Consolas'>=
=A0=A0=A0 _R
(_T::*f1)(_Arg1, _Arg ... ) _SIG;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>public:\</=
span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
typedef _SIG
_T* first_argument_type;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
typedef
_Arg1 second_argument_type;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
typedef _R
return_type;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>\</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0
_one_p_delegate1 ## _NAME(_R (_T::*_fx)(_Arg1, _Arg ... ) _SIG):f1(_fx)\</s=
pan></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
{\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
} \</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>\</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0
template<class _OBJECT>\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
_R
operator()(_OBJECT _obj,_Arg1 _x1, _Arg ...=A0 _x) _SIG\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
{\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0=
=A0=A0=A0=A0 return
(_getRef=A0 ## _NAME(f1, _obj).*f1)(std::forward<_Arg1>(_x1),
std::forward<_Arg>(_x) ...);\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
}\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>};</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_param=
_delegate1(,_simple)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_param=
_delegate1(const,
_const)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_param=
_delegate1(const
volatile, _const_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_param=
_delegate1(volatile,
_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>#define
_one_param_delegate0(_SIG, _NAME)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>template&l=
t;class
_T, class _R>\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>class
_one_p_delegate0 ## _NAME\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span lang=3DFR style=3D'font-size:10.0pt;font-family:Consolas'>=
{\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span lang=3DFR style=3D'font-size:10.0pt;font-family:Consolas'>=
=A0=A0=A0 _R
(_T::*f1)() _SIG;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span lang=3DFR style=3D'font-size:10.0pt;font-family:Consolas'>=
public:\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span lang=3DFR style=3D'font-size:10.0pt;font-family:Consolas'>=
=A0=A0=A0 </span></b><b><span
style=3D'font-size:10.0pt;font-family:Consolas'>typedef _SIG _T* argument_t=
ype;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
typedef _R
return_type;\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>\</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0
_one_p_delegate0 ## _NAME(_R (_T::*_fx)() _SIG):f1(_fx)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
{\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
} \</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>\</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0
template<class _OBJECT>\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
_R
operator()(_OBJECT _obj) _SIG\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
{\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0=
=A0=A0=A0=A0 return (_getRef=A0
## _NAME(f1, _obj).*f1)();\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
}\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>};</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_param=
_delegate0(,_simple)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_param=
_delegate0(const,
_const)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_param=
_delegate0(const
volatile, _const_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_param=
_delegate0(volatile,
_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>#define
_mem_fn_macro2(_SIG,_NAME)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>template&l=
t;class
_OBJECT, class _T, class _R, class _Arg1, class _Arg2, class ... _Arg>\<=
/span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_delegate2=
##
_NAME<_OBJECT,_T,_R,_Arg1, _Arg2, _Arg ... </span></b><b><span lang=3DFR
style=3D'font-size:10.0pt;font-family:Consolas'>> mem_fn(_R (_T::*_f)(_A=
rg1,
_Arg2, _Arg ... ) </span></b><b><span style=3D'font-size:10.0pt;font-family=
:Consolas'>_SIG,
_OBJECT _obj)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>{\</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
return
_delegate2 ## _NAME <_OBJECT,_T,_R, _Arg1, _Arg2, _Arg ... >(_f, _obj=
);\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>}</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_mem_fn_ma=
cro2(,_simple)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_mem_fn_ma=
cro2(const,_const)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_mem_fn_ma=
cro2(const
volatile, _const_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_mem_fn_ma=
cro2(volatile,
_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>#define
_mem_fn_macro1(_SIG,_NAME)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>template&l=
t;class
_OBJECT, class _T, class _R, class _Arg1>\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_delegate1=
##
_NAME<_OBJECT,_T,_R,_Arg1> mem_fn(_R (_T::*_f)(_Arg1) _SIG, _OBJECT
_obj)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>{\</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
return
_delegate1 ## _NAME <_OBJECT,_T,_R, _Arg1>(_f, _obj);\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>}</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_mem_fn_ma=
cro1(,_simple)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_mem_fn_ma=
cro1(const,_const)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_mem_fn_ma=
cro1(const
volatile, _const_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_mem_fn_ma=
cro1(volatile,
_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>#define
_mem_fn_macro0(_SIG,_NAME)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>template&l=
t;class
_OBJECT, class _T, class _R>\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_delegate0=
##
_NAME<_OBJECT,_T,_R> mem_fn(_R (_T::*_f)() _SIG, _OBJECT _obj)\</span=
></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>{\</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
return
_delegate0 ## _NAME <_OBJECT,_T,_R>(_f, _obj);\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>}</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_mem_fn_ma=
cro0(,_simple)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_mem_fn_ma=
cro0(const,_const)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_mem_fn_ma=
cro0(const
volatile, _const_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_mem_fn_ma=
cro0(volatile,
_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>#define
_one_p_mem_fn_macro1(_SIG,_NAME)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>template&l=
t;class
_T, class _R, class _Arg1, class ... _Arg>\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_p_del=
egate1
## _NAME<_T,_R,_Arg1, _Arg ... </span></b><b><span lang=3DFR style=3D'fo=
nt-size:
10.0pt;font-family:Consolas'>> mem_fn(_R (_T::*_f)(_Arg1, _Arg ... ) </s=
pan></b><b><span
style=3D'font-size:10.0pt;font-family:Consolas'>_SIG)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>{\</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
return
_one_p_delegate1 ## _NAME <_T,_R,_Arg1, _Arg ... >(_f);\</span></b></=
p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>}</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_p_mem=
_fn_macro1(,_simple)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_p_mem=
_fn_macro1(const,_const)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_p_mem=
_fn_macro1(const
volatile, _const_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_p_mem=
_fn_macro1(volatile,
_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>#define
_one_p_mem_fn_macro0(_SIG,_NAME)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>template&l=
t;class
_T, class _R>\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_p_del=
egate0
## _NAME<_T,_R> mem_fn(_R (_T::*_f)() _SIG)\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>{\</span><=
/b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>=A0=A0=A0 =
return
_one_p_delegate0 ## _NAME <_T,_R>(_f);\</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>}</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_p_mem=
_fn_macro0(,_simple)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_p_mem=
_fn_macro0(const,_const)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_p_mem=
_fn_macro0(const
volatile, _const_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>_one_p_mem=
_fn_macro0(volatile,
_volatile)</span></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'> </sp=
an></b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'><b><span style=3D'font-size:10.0pt;font-family:Consolas'>}</span></=
b></p>
<p class=3DMsoNormal style=3D'margin-bottom:0cm;margin-bottom:.0001pt;line-=
height:
normal'> </p>
</div>
</body>
</html>
------=_Part_3485_20469894.1379790081477--
.