• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>Reference Documentation</title>
5<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7<link rel="home" href="../index.html" title="CallableTraits">
8<link rel="up" href="../index.html" title="CallableTraits">
9<link rel="prev" href="../index.html" title="CallableTraits">
10<link rel="next" href="faq.html" title="FAQ">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr>
14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
15<td align="center"><a href="../../../../../index.html">Home</a></td>
16<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19<td align="center"><a href="../../../../../more/index.htm">More</a></td>
20</tr></table>
21<hr>
22<div class="spirit-nav">
23<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="faq.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
24</div>
25<div class="section">
26<div class="titlepage"><div><div><h2 class="title" style="clear: both">
27<a name="callable_traits.reference"></a><a class="link" href="reference.html" title="Reference Documentation">Reference Documentation</a>
28</h2></div></div></div>
29<div class="toc"><dl class="toc">
30<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_add_member_const">add_member_const</a></span></dt>
31<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_add_member_cv">add_member_cv</a></span></dt>
32<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_add_member_lvalue_reference">add_member_lvalue_reference</a></span></dt>
33<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_add_member_rvalue_reference">add_member_rvalue_reference</a></span></dt>
34<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_add_member_volatile">add_member_volatile</a></span></dt>
35<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_add_noexcept">add_noexcept</a></span></dt>
36<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_add_transaction_safe">add_transaction_safe</a></span></dt>
37<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_add_varargs">add_varargs</a></span></dt>
38<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_apply_member_pointer">apply_member_pointer</a></span></dt>
39<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_apply_return">apply_return</a></span></dt>
40<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_args">args</a></span></dt>
41<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_class_of">class_of</a></span></dt>
42<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_function_type">function_type</a></span></dt>
43<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_has_member_qualifiers">has_member_qualifiers</a></span></dt>
44<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_has_varargs">has_varargs</a></span></dt>
45<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_has_void_return">has_void_return</a></span></dt>
46<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_is_const_member">is_const_member</a></span></dt>
47<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_is_cv_member">is_cv_member</a></span></dt>
48<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_is_invocable">is_invocable</a></span></dt>
49<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_is_lvalue_reference_member">is_lvalue_reference_member</a></span></dt>
50<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_is_reference_member">is_reference_member</a></span></dt>
51<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_is_rvalue_reference_member">is_rvalue_reference_member</a></span></dt>
52<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_is_noexcept">is_noexcept</a></span></dt>
53<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_is_transaction_safe">is_transaction_safe</a></span></dt>
54<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_is_volatile_member">is_volatile_member</a></span></dt>
55<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_qualified_class_of">qualified_class_of</a></span></dt>
56<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_remove_member_const">remove_member_const</a></span></dt>
57<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_remove_member_cv">remove_member_cv</a></span></dt>
58<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_remove_member_reference">remove_member_reference</a></span></dt>
59<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_remove_member_volatile">remove_member_volatile</a></span></dt>
60<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_remove_noexcept">remove_noexcept</a></span></dt>
61<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_remove_transaction_safe">remove_transaction_safe</a></span></dt>
62<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_remove_varargs">remove_varargs</a></span></dt>
63<dt><span class="section"><a href="reference.html#callable_traits.reference.ref_return_type">return_type</a></span></dt>
64</dl></div>
65<p>
66      This reference will be most beneficial to readers familiar with the following
67      C++ topics:
68    </p>
69<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
70<li class="listitem">
71          <a href="http://en.cppreference.com/w/cpp/language/partial_specialization" target="_top">template
72          specializations</a>
73        </li>
74<li class="listitem">
75          <a href="http://en.cppreference.com/w/cpp/language/sfinae" target="_top">SFINAE</a>
76        </li>
77<li class="listitem">
78          <a href="http://en.cppreference.com/w/cpp/utility/functional/invoke" target="_top"><code class="literal"><span class="emphasis"><em>INVOKE</em></span></code></a>
79          rules
80        </li>
81<li class="listitem">
82          function types
83        </li>
84<li class="listitem">
85          <a href="http://en.cppreference.com/w/cpp/language/pointer#Pointers_to_functions" target="_top">function
86          pointers</a>
87        </li>
88<li class="listitem">
89          <a href="http://stackoverflow.com/questions/480248/function-references" target="_top">function
90          references</a>
91        </li>
92<li class="listitem">
93          <a href="http://en.cppreference.com/w/cpp/language/pointer#Pointers_to_member_functions" target="_top">pointers
94          to member functions</a> (a.k.a. PMFs)
95        </li>
96<li class="listitem">
97          <a href="http://en.cppreference.com/w/cpp/language/pointer#Pointers_to_data_members" target="_top">pointers
98          to data members</a> (a.k.a. PMDs)
99        </li>
100<li class="listitem">
101          <a href="http://en.cppreference.com/w/cpp/language/operators#Function_call_operator" target="_top">the
102          function call operator, <code class="literal">operator()</code></a>
103        </li>
104<li class="listitem">
105          <a href="https://isocpp.org/blog/2012/11/universal-references-in-c11-scott-meyers" target="_top">universal
106          references</a> and <a href="http://stackoverflow.com/questions/13725747/concise-explanation-of-reference-collapsing-rules-requested-1-a-a-2" target="_top">reference
107          collapsing rules</a>
108        </li>
109<li class="listitem">
110          <a href="http://en.cppreference.com/w/cpp/language/member_functions#const-.2C_volatile-.2C_and_ref-qualified_member_functions" target="_top">cv-qualified
111          and ref-qualified member functions</a>
112        </li>
113<li class="listitem">
114          <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0172r0.html" target="_top">"abominable"
115          function types</a>
116        </li>
117<li class="listitem">
118          <a href="http://en.cppreference.com/w/c/language/variadic" target="_top">C-style variadics</a>,
119          a.k.a. varargs
120        </li>
121</ul></div>
122<div class="section">
123<div class="titlepage"><div><div><h3 class="title">
124<a name="callable_traits.reference.ref_add_member_const"></a><a class="link" href="reference.html#callable_traits.reference.ref_add_member_const" title="add_member_const">add_member_const</a>
125</h3></div></div></div>
126<h5>
127<a name="callable_traits.reference.ref_add_member_const.h0"></a>
128        <span class="phrase"><a name="callable_traits.reference.ref_add_member_const.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_const.header">Header</a>
129      </h5>
130<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">add_member_const</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
131<h5>
132<a name="callable_traits.reference.ref_add_member_const.h1"></a>
133        <span class="phrase"><a name="callable_traits.reference.ref_add_member_const.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_const.definition">Definition</a>
134      </h5>
135<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
136<span class="keyword">using</span> <span class="identifier">add_member_const_t</span> <span class="special">=</span> <span class="comment">//see below</span>
137
138<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
139<span class="keyword">struct</span> <span class="identifier">add_member_const</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">add_member_const_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
140</pre>
141<h5>
142<a name="callable_traits.reference.ref_add_member_const.h2"></a>
143        <span class="phrase"><a name="callable_traits.reference.ref_add_member_const.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_const.constraints">Constraints</a>
144      </h5>
145<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
146<li class="listitem">
147            <code class="computeroutput"><span class="identifier">T</span></code> must be a function
148            type or a member function pointer type
149          </li>
150<li class="listitem">
151            If <code class="computeroutput"><span class="identifier">T</span></code> is a pointer, it
152            may not be cv/ref qualified
153          </li>
154</ul></div>
155<h5>
156<a name="callable_traits.reference.ref_add_member_const.h3"></a>
157        <span class="phrase"><a name="callable_traits.reference.ref_add_member_const.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_const.behavior">Behavior</a>
158      </h5>
159<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
160<li class="listitem">
161            A substitution failure occurs if the constraints are violated.
162          </li>
163<li class="listitem">
164            Adds a member <code class="computeroutput"><span class="keyword">const</span></code> qualifier
165            to <code class="computeroutput"><span class="identifier">T</span></code>, if not already
166            present.
167          </li>
168</ul></div>
169<h5>
170<a name="callable_traits.reference.ref_add_member_const.h4"></a>
171        <span class="phrase"><a name="callable_traits.reference.ref_add_member_const.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_const.input_output_examples">Input/Output
172        Examples</a>
173      </h5>
174<div class="informaltable"><table class="table">
175<colgroup>
176<col>
177<col>
178</colgroup>
179<thead><tr>
180<th>
181                <p>
182                  <code class="computeroutput"><span class="identifier">T</span></code>
183                </p>
184              </th>
185<th>
186                <p>
187                  <code class="computeroutput"><span class="identifier">add_member_const_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
188                </p>
189              </th>
190</tr></thead>
191<tbody>
192<tr>
193<td>
194                <p>
195                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
196                </p>
197              </td>
198<td>
199                <p>
200                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
201                  <span class="keyword">const</span></code>
202                </p>
203              </td>
204</tr>
205<tr>
206<td>
207                <p>
208                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
209                </p>
210              </td>
211<td>
212                <p>
213                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
214                  <span class="keyword">const</span></code>
215                </p>
216              </td>
217</tr>
218<tr>
219<td>
220                <p>
221                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
222                  <span class="special">&amp;</span></code>
223                </p>
224              </td>
225<td>
226                <p>
227                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
228                  <span class="keyword">const</span> <span class="special">&amp;</span></code>
229                </p>
230              </td>
231</tr>
232<tr>
233<td>
234                <p>
235                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
236                  <span class="special">&amp;&amp;</span></code>
237                </p>
238              </td>
239<td>
240                <p>
241                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
242                  <span class="keyword">const</span> <span class="special">&amp;&amp;</span></code>
243                </p>
244              </td>
245</tr>
246<tr>
247<td>
248                <p>
249                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
250                  <span class="keyword">const</span></code>
251                </p>
252              </td>
253<td>
254                <p>
255                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
256                  <span class="keyword">const</span></code>
257                </p>
258              </td>
259</tr>
260<tr>
261<td>
262                <p>
263                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
264                  <span class="keyword">volatile</span></code>
265                </p>
266              </td>
267<td>
268                <p>
269                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
270                  <span class="keyword">const</span> <span class="keyword">volatile</span></code>
271                </p>
272              </td>
273</tr>
274<tr>
275<td>
276                <p>
277                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
278                  <span class="identifier">transaction_safe</span></code>
279                </p>
280              </td>
281<td>
282                <p>
283                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
284                  <span class="keyword">const</span> <span class="identifier">transaction_safe</span></code>
285                </p>
286              </td>
287</tr>
288<tr>
289<td>
290                <p>
291                  <code class="computeroutput"><span class="keyword">int</span></code>
292                </p>
293              </td>
294<td>
295                <p>
296                  (substitution failure)
297                </p>
298              </td>
299</tr>
300<tr>
301<td>
302                <p>
303                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(&amp;)()</span></code>
304                </p>
305              </td>
306<td>
307                <p>
308                  (substitution failure)
309                </p>
310              </td>
311</tr>
312<tr>
313<td>
314                <p>
315                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)()</span></code>
316                </p>
317              </td>
318<td>
319                <p>
320                  (substitution failure)
321                </p>
322              </td>
323</tr>
324<tr>
325<td>
326                <p>
327                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
328                </p>
329              </td>
330<td>
331                <p>
332                  (substitution failure)
333                </p>
334              </td>
335</tr>
336<tr>
337<td>
338                <p>
339                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
340                  <span class="keyword">const</span><span class="special">)()</span></code>
341                </p>
342              </td>
343<td>
344                <p>
345                  (substitution failure)
346                </p>
347              </td>
348</tr>
349</tbody>
350</table></div>
351<h5>
352<a name="callable_traits.reference.ref_add_member_const.h5"></a>
353        <span class="phrase"><a name="callable_traits.reference.ref_add_member_const.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_const.example_program">Example
354        Program</a>
355      </h5>
356<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
357<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">add_member_const</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
358
359<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
360
361<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">{};</span>
362
363<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
364
365    <span class="special">{</span>
366        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)();</span>
367        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span><span class="special">;</span>
368        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_const_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
369        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
370    <span class="special">}</span> <span class="special">{</span>
371        <span class="comment">// add_member_const_t doesn't change anything when</span>
372        <span class="comment">// the function type is already const.</span>
373        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="special">&amp;&amp;;</span>
374        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="special">&amp;&amp;;</span>
375        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_const_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
376        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
377    <span class="special">}</span> <span class="special">{</span>
378        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">volatile</span> <span class="special">&amp;;</span>
379        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="special">&amp;;</span>
380        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_const_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
381        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
382    <span class="special">}</span> <span class="special">{</span>
383        <span class="comment">// add_member_const_t can also be used with "abominable"</span>
384        <span class="comment">// function types.</span>
385        <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">();</span>
386        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
387        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_const_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">&gt;;</span>
388        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
389    <span class="special">}</span>
390<span class="special">}</span>
391</pre>
392</div>
393<div class="section">
394<div class="titlepage"><div><div><h3 class="title">
395<a name="callable_traits.reference.ref_add_member_cv"></a><a class="link" href="reference.html#callable_traits.reference.ref_add_member_cv" title="add_member_cv">add_member_cv</a>
396</h3></div></div></div>
397<h5>
398<a name="callable_traits.reference.ref_add_member_cv.h0"></a>
399        <span class="phrase"><a name="callable_traits.reference.ref_add_member_cv.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_cv.header">Header</a>
400      </h5>
401<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">add_member_cv</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
402<h5>
403<a name="callable_traits.reference.ref_add_member_cv.h1"></a>
404        <span class="phrase"><a name="callable_traits.reference.ref_add_member_cv.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_cv.definition">Definition</a>
405      </h5>
406<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
407<span class="keyword">using</span> <span class="identifier">add_member_cv_t</span> <span class="special">=</span> <span class="comment">//see below</span>
408
409<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
410<span class="keyword">struct</span> <span class="identifier">add_member_cv</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">add_member_cv_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
411</pre>
412<h5>
413<a name="callable_traits.reference.ref_add_member_cv.h2"></a>
414        <span class="phrase"><a name="callable_traits.reference.ref_add_member_cv.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_cv.constraints">Constraints</a>
415      </h5>
416<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
417<li class="listitem">
418            <code class="computeroutput"><span class="identifier">T</span></code> must be a function
419            type or a member function pointer type
420          </li>
421<li class="listitem">
422            If <code class="computeroutput"><span class="identifier">T</span></code> is a pointer, it
423            may not be cv/ref qualified
424          </li>
425</ul></div>
426<h5>
427<a name="callable_traits.reference.ref_add_member_cv.h3"></a>
428        <span class="phrase"><a name="callable_traits.reference.ref_add_member_cv.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_cv.behavior">Behavior</a>
429      </h5>
430<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
431<li class="listitem">
432            A substitution failure occurs if the constraints are violated.
433          </li>
434<li class="listitem">
435            Adds member <code class="computeroutput"><span class="keyword">const</span></code> and <code class="computeroutput"><span class="keyword">volatile</span></code> qualifiers to <code class="computeroutput"><span class="identifier">T</span></code>,
436            if not already present.
437          </li>
438</ul></div>
439<h5>
440<a name="callable_traits.reference.ref_add_member_cv.h4"></a>
441        <span class="phrase"><a name="callable_traits.reference.ref_add_member_cv.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_cv.input_output_examples">Input/Output
442        Examples</a>
443      </h5>
444<div class="informaltable"><table class="table">
445<colgroup>
446<col>
447<col>
448</colgroup>
449<thead><tr>
450<th>
451                <p>
452                  <code class="computeroutput"><span class="identifier">T</span></code>
453                </p>
454              </th>
455<th>
456                <p>
457                  <code class="computeroutput"><span class="identifier">add_member_cv_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
458                </p>
459              </th>
460</tr></thead>
461<tbody>
462<tr>
463<td>
464                <p>
465                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
466                </p>
467              </td>
468<td>
469                <p>
470                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
471                  <span class="keyword">const</span> <span class="keyword">volatile</span></code>
472                </p>
473              </td>
474</tr>
475<tr>
476<td>
477                <p>
478                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
479                </p>
480              </td>
481<td>
482                <p>
483                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
484                  <span class="keyword">const</span> <span class="keyword">volatile</span></code>
485                </p>
486              </td>
487</tr>
488<tr>
489<td>
490                <p>
491                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
492                  <span class="special">&amp;</span></code>
493                </p>
494              </td>
495<td>
496                <p>
497                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
498                  <span class="keyword">const</span> <span class="keyword">volatile</span>
499                  <span class="special">&amp;</span></code>
500                </p>
501              </td>
502</tr>
503<tr>
504<td>
505                <p>
506                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
507                  <span class="special">&amp;&amp;</span></code>
508                </p>
509              </td>
510<td>
511                <p>
512                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
513                  <span class="keyword">const</span> <span class="keyword">volatile</span>
514                  <span class="special">&amp;&amp;</span></code>
515                </p>
516              </td>
517</tr>
518<tr>
519<td>
520                <p>
521                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
522                  <span class="keyword">const</span></code>
523                </p>
524              </td>
525<td>
526                <p>
527                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
528                  <span class="keyword">const</span> <span class="keyword">volatile</span></code>
529                </p>
530              </td>
531</tr>
532<tr>
533<td>
534                <p>
535                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
536                  <span class="keyword">volatile</span></code>
537                </p>
538              </td>
539<td>
540                <p>
541                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
542                  <span class="keyword">const</span> <span class="keyword">volatile</span></code>
543                </p>
544              </td>
545</tr>
546<tr>
547<td>
548                <p>
549                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
550                  <span class="identifier">transaction_safe</span></code>
551                </p>
552              </td>
553<td>
554                <p>
555                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
556                  <span class="keyword">const</span> <span class="keyword">volatile</span>
557                  <span class="identifier">transaction_safe</span></code>
558                </p>
559              </td>
560</tr>
561<tr>
562<td>
563                <p>
564                  <code class="computeroutput"><span class="keyword">int</span></code>
565                </p>
566              </td>
567<td>
568                <p>
569                  (substitution failure)
570                </p>
571              </td>
572</tr>
573<tr>
574<td>
575                <p>
576                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(&amp;)()</span></code>
577                </p>
578              </td>
579<td>
580                <p>
581                  (substitution failure)
582                </p>
583              </td>
584</tr>
585<tr>
586<td>
587                <p>
588                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)()</span></code>
589                </p>
590              </td>
591<td>
592                <p>
593                  (substitution failure)
594                </p>
595              </td>
596</tr>
597<tr>
598<td>
599                <p>
600                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
601                </p>
602              </td>
603<td>
604                <p>
605                  (substitution failure)
606                </p>
607              </td>
608</tr>
609<tr>
610<td>
611                <p>
612                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
613                  <span class="keyword">const</span><span class="special">)()</span></code>
614                </p>
615              </td>
616<td>
617                <p>
618                  (substitution failure)
619                </p>
620              </td>
621</tr>
622</tbody>
623</table></div>
624<h5>
625<a name="callable_traits.reference.ref_add_member_cv.h5"></a>
626        <span class="phrase"><a name="callable_traits.reference.ref_add_member_cv.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_cv.example_program">Example
627        Program</a>
628      </h5>
629<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
630<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">add_member_cv</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
631
632<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
633
634<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">{};</span>
635
636<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
637
638    <span class="special">{</span>
639        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)();</span>
640        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="keyword">volatile</span><span class="special">;</span>
641        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_cv_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
642        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
643    <span class="special">}</span> <span class="special">{</span>
644        <span class="comment">// add_member_cv_t doesn't change anything when</span>
645        <span class="comment">// the function type is already cv-qualified.</span>
646        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="special">&amp;&amp;;</span>
647        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="special">&amp;&amp;;</span>
648        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_cv_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
649        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
650    <span class="special">}</span> <span class="special">{</span>
651        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">volatile</span> <span class="special">&amp;;</span>
652        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="special">&amp;;</span>
653        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_cv_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
654        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
655    <span class="special">}</span> <span class="special">{</span>
656        <span class="comment">// add_member_cv_t can also be used with "abominable"</span>
657        <span class="comment">// function types.</span>
658        <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">();</span>
659        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">volatile</span><span class="special">;</span>
660        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_cv_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">&gt;;</span>
661        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
662    <span class="special">}</span>
663<span class="special">}</span>
664</pre>
665</div>
666<div class="section">
667<div class="titlepage"><div><div><h3 class="title">
668<a name="callable_traits.reference.ref_add_member_lvalue_reference"></a><a class="link" href="reference.html#callable_traits.reference.ref_add_member_lvalue_reference" title="add_member_lvalue_reference">add_member_lvalue_reference</a>
669</h3></div></div></div>
670<h5>
671<a name="callable_traits.reference.ref_add_member_lvalue_reference.h0"></a>
672        <span class="phrase"><a name="callable_traits.reference.ref_add_member_lvalue_reference.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_lvalue_reference.header">Header</a>
673      </h5>
674<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">add_member_lvalue_reference</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
675<h5>
676<a name="callable_traits.reference.ref_add_member_lvalue_reference.h1"></a>
677        <span class="phrase"><a name="callable_traits.reference.ref_add_member_lvalue_reference.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_lvalue_reference.definition">Definition</a>
678      </h5>
679<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
680<span class="keyword">using</span> <span class="identifier">add_member_lvalue_reference_t</span> <span class="special">=</span> <span class="comment">//see below</span>
681
682<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
683<span class="keyword">struct</span> <span class="identifier">add_member_lvalue_reference</span>
684  <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">add_member_lvalue_reference_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
685</pre>
686<h5>
687<a name="callable_traits.reference.ref_add_member_lvalue_reference.h2"></a>
688        <span class="phrase"><a name="callable_traits.reference.ref_add_member_lvalue_reference.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_lvalue_reference.constraints">Constraints</a>
689      </h5>
690<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
691<li class="listitem">
692            <code class="computeroutput"><span class="identifier">T</span></code> must be a function
693            type or a member function pointer type
694          </li>
695<li class="listitem">
696            If <code class="computeroutput"><span class="identifier">T</span></code> is a pointer, it
697            may not be cv/ref qualified
698          </li>
699</ul></div>
700<h5>
701<a name="callable_traits.reference.ref_add_member_lvalue_reference.h3"></a>
702        <span class="phrase"><a name="callable_traits.reference.ref_add_member_lvalue_reference.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_lvalue_reference.behavior">Behavior</a>
703      </h5>
704<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
705<li class="listitem">
706            A substitution failure occurs if the constraints are violated.
707          </li>
708<li class="listitem">
709            Adds a member lvalue reference qualifier (<code class="computeroutput"><span class="special">&amp;</span></code>)
710            to <code class="computeroutput"><span class="identifier">T</span></code>, if not already
711            present.
712          </li>
713<li class="listitem">
714            If an rvalue reference qualifier is present, the lvalue reference qualifier
715            replaces it (in accordance with reference collapsing rules).
716          </li>
717</ul></div>
718<h5>
719<a name="callable_traits.reference.ref_add_member_lvalue_reference.h4"></a>
720        <span class="phrase"><a name="callable_traits.reference.ref_add_member_lvalue_reference.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_lvalue_reference.input_output_examples">Input/Output
721        Examples</a>
722      </h5>
723<div class="informaltable"><table class="table">
724<colgroup>
725<col>
726<col>
727</colgroup>
728<thead><tr>
729<th>
730                <p>
731                  <code class="computeroutput"><span class="identifier">T</span></code>
732                </p>
733              </th>
734<th>
735                <p>
736                  <code class="computeroutput"><span class="identifier">add_member_lvalue_reference_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
737                </p>
738              </th>
739</tr></thead>
740<tbody>
741<tr>
742<td>
743                <p>
744                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
745                </p>
746              </td>
747<td>
748                <p>
749                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
750                  <span class="special">&amp;</span></code>
751                </p>
752              </td>
753</tr>
754<tr>
755<td>
756                <p>
757                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
758                </p>
759              </td>
760<td>
761                <p>
762                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
763                  <span class="special">&amp;</span></code>
764                </p>
765              </td>
766</tr>
767<tr>
768<td>
769                <p>
770                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
771                  <span class="special">&amp;</span></code>
772                </p>
773              </td>
774<td>
775                <p>
776                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
777                  <span class="special">&amp;</span></code>
778                </p>
779              </td>
780</tr>
781<tr>
782<td>
783                <p>
784                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
785                  <span class="special">&amp;&amp;</span></code>
786                </p>
787              </td>
788<td>
789                <p>
790                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
791                  <span class="special">&amp;</span></code>
792                </p>
793              </td>
794</tr>
795<tr>
796<td>
797                <p>
798                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
799                  <span class="keyword">const</span></code>
800                </p>
801              </td>
802<td>
803                <p>
804                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
805                  <span class="keyword">const</span> <span class="special">&amp;</span></code>
806                </p>
807              </td>
808</tr>
809<tr>
810<td>
811                <p>
812                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
813                  <span class="identifier">transaction_safe</span></code>
814                </p>
815              </td>
816<td>
817                <p>
818                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
819                  <span class="special">&amp;</span> <span class="identifier">transaction_safe</span></code>
820                </p>
821              </td>
822</tr>
823<tr>
824<td>
825                <p>
826                  <code class="computeroutput"><span class="keyword">int</span></code>
827                </p>
828              </td>
829<td>
830                <p>
831                  (substitution failure)
832                </p>
833              </td>
834</tr>
835<tr>
836<td>
837                <p>
838                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(&amp;)()</span></code>
839                </p>
840              </td>
841<td>
842                <p>
843                  (substitution failure)
844                </p>
845              </td>
846</tr>
847<tr>
848<td>
849                <p>
850                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)()</span></code>
851                </p>
852              </td>
853<td>
854                <p>
855                  (substitution failure)
856                </p>
857              </td>
858</tr>
859<tr>
860<td>
861                <p>
862                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
863                </p>
864              </td>
865<td>
866                <p>
867                  (substitution failure)
868                </p>
869              </td>
870</tr>
871<tr>
872<td>
873                <p>
874                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
875                  <span class="keyword">const</span><span class="special">)()</span></code>
876                </p>
877              </td>
878<td>
879                <p>
880                  (substitution failure)
881                </p>
882              </td>
883</tr>
884</tbody>
885</table></div>
886<h5>
887<a name="callable_traits.reference.ref_add_member_lvalue_reference.h5"></a>
888        <span class="phrase"><a name="callable_traits.reference.ref_add_member_lvalue_reference.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_lvalue_reference.example_program">Example
889        Program</a>
890      </h5>
891<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
892<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">add_member_lvalue_reference</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
893
894<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
895
896<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">{};</span>
897
898<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
899
900    <span class="special">{</span>
901        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)();</span>
902        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="special">&amp;;</span>
903        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_lvalue_reference_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
904        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
905    <span class="special">}</span> <span class="special">{</span>
906        <span class="comment">// add_member_lvalue_reference_t doesn't change anything when</span>
907        <span class="comment">// the function type already has an lvalue qualifier.</span>
908        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="special">&amp;;</span>
909        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="special">&amp;;</span>
910        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_lvalue_reference_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
911        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
912    <span class="special">}</span> <span class="special">{</span>
913        <span class="comment">// add_member_lvalue_reference_t models C++11 reference collapsing</span>
914        <span class="comment">// rules, so that adding an lvalue qualifier to an</span>
915        <span class="comment">// rvalue-qualified type will force the lvalue.</span>
916        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="special">&amp;&amp;;</span>
917        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="special">&amp;;</span>
918        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_lvalue_reference_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
919        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
920    <span class="special">}</span> <span class="special">{</span>
921        <span class="comment">// add_member_lvalue_reference_t can also be used to create "abominable"</span>
922        <span class="comment">// function types.</span>
923        <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">();</span>
924        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">()</span> <span class="special">&amp;;</span>
925        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_lvalue_reference_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">&gt;;</span>
926        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
927    <span class="special">}</span>
928<span class="special">}</span>
929</pre>
930</div>
931<div class="section">
932<div class="titlepage"><div><div><h3 class="title">
933<a name="callable_traits.reference.ref_add_member_rvalue_reference"></a><a class="link" href="reference.html#callable_traits.reference.ref_add_member_rvalue_reference" title="add_member_rvalue_reference">add_member_rvalue_reference</a>
934</h3></div></div></div>
935<h5>
936<a name="callable_traits.reference.ref_add_member_rvalue_reference.h0"></a>
937        <span class="phrase"><a name="callable_traits.reference.ref_add_member_rvalue_reference.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_rvalue_reference.header">Header</a>
938      </h5>
939<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">add_member_rvalue_reference</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
940<h5>
941<a name="callable_traits.reference.ref_add_member_rvalue_reference.h1"></a>
942        <span class="phrase"><a name="callable_traits.reference.ref_add_member_rvalue_reference.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_rvalue_reference.definition">Definition</a>
943      </h5>
944<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
945<span class="keyword">using</span> <span class="identifier">add_member_rvalue_reference_t</span> <span class="special">=</span> <span class="comment">//see below</span>
946
947
948<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
949<span class="keyword">struct</span> <span class="identifier">add_member_rvalue_reference</span>
950  <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">add_member_rvalue_reference_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
951</pre>
952<h5>
953<a name="callable_traits.reference.ref_add_member_rvalue_reference.h2"></a>
954        <span class="phrase"><a name="callable_traits.reference.ref_add_member_rvalue_reference.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_rvalue_reference.constraints">Constraints</a>
955      </h5>
956<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
957<li class="listitem">
958            <code class="computeroutput"><span class="identifier">T</span></code> must be a function
959            type or a member function pointer type
960          </li>
961<li class="listitem">
962            If <code class="computeroutput"><span class="identifier">T</span></code> is a pointer, it
963            may not be cv/ref qualified
964          </li>
965</ul></div>
966<h5>
967<a name="callable_traits.reference.ref_add_member_rvalue_reference.h3"></a>
968        <span class="phrase"><a name="callable_traits.reference.ref_add_member_rvalue_reference.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_rvalue_reference.behavior">Behavior</a>
969      </h5>
970<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
971<li class="listitem">
972            A substitution failure occurs if the constraints are violated.
973          </li>
974<li class="listitem">
975            Adds a member rvalue reference qualifier (<code class="computeroutput"><span class="special">&amp;&amp;</span></code>)
976            to <code class="computeroutput"><span class="identifier">T</span></code>, if not already
977            present.
978          </li>
979<li class="listitem">
980            If an lvalue reference qualifier is present, the lvalue reference qualifier
981            remains (in accordance with reference collapsing rules).
982          </li>
983</ul></div>
984<h5>
985<a name="callable_traits.reference.ref_add_member_rvalue_reference.h4"></a>
986        <span class="phrase"><a name="callable_traits.reference.ref_add_member_rvalue_reference.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_rvalue_reference.input_output_examples">Input/Output
987        Examples</a>
988      </h5>
989<div class="informaltable"><table class="table">
990<colgroup>
991<col>
992<col>
993</colgroup>
994<thead><tr>
995<th>
996                <p>
997                  <code class="computeroutput"><span class="identifier">T</span></code>
998                </p>
999              </th>
1000<th>
1001                <p>
1002                  <code class="computeroutput"><span class="identifier">add_member_rvalue_reference_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
1003                </p>
1004              </th>
1005</tr></thead>
1006<tbody>
1007<tr>
1008<td>
1009                <p>
1010                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
1011                </p>
1012              </td>
1013<td>
1014                <p>
1015                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
1016                  <span class="special">&amp;&amp;</span></code>
1017                </p>
1018              </td>
1019</tr>
1020<tr>
1021<td>
1022                <p>
1023                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
1024                </p>
1025              </td>
1026<td>
1027                <p>
1028                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1029                  <span class="special">&amp;&amp;</span></code>
1030                </p>
1031              </td>
1032</tr>
1033<tr>
1034<td>
1035                <p>
1036                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1037                  <span class="special">&amp;</span></code>
1038                </p>
1039              </td>
1040<td>
1041                <p>
1042                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1043                  <span class="special">&amp;</span></code>
1044                </p>
1045              </td>
1046</tr>
1047<tr>
1048<td>
1049                <p>
1050                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1051                  <span class="special">&amp;&amp;</span></code>
1052                </p>
1053              </td>
1054<td>
1055                <p>
1056                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1057                  <span class="special">&amp;&amp;</span></code>
1058                </p>
1059              </td>
1060</tr>
1061<tr>
1062<td>
1063                <p>
1064                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1065                  <span class="keyword">const</span></code>
1066                </p>
1067              </td>
1068<td>
1069                <p>
1070                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1071                  <span class="keyword">const</span> <span class="special">&amp;&amp;</span></code>
1072                </p>
1073              </td>
1074</tr>
1075<tr>
1076<td>
1077                <p>
1078                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1079                  <span class="identifier">transaction_safe</span></code>
1080                </p>
1081              </td>
1082<td>
1083                <p>
1084                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1085                  <span class="special">&amp;&amp;</span> <span class="identifier">transaction_safe</span></code>
1086                </p>
1087              </td>
1088</tr>
1089<tr>
1090<td>
1091                <p>
1092                  <code class="computeroutput"><span class="keyword">int</span></code>
1093                </p>
1094              </td>
1095<td>
1096                <p>
1097                  (substitution failure)
1098                </p>
1099              </td>
1100</tr>
1101<tr>
1102<td>
1103                <p>
1104                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(&amp;)()</span></code>
1105                </p>
1106              </td>
1107<td>
1108                <p>
1109                  (substitution failure)
1110                </p>
1111              </td>
1112</tr>
1113<tr>
1114<td>
1115                <p>
1116                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)()</span></code>
1117                </p>
1118              </td>
1119<td>
1120                <p>
1121                  (substitution failure)
1122                </p>
1123              </td>
1124</tr>
1125<tr>
1126<td>
1127                <p>
1128                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
1129                </p>
1130              </td>
1131<td>
1132                <p>
1133                  (substitution failure)
1134                </p>
1135              </td>
1136</tr>
1137<tr>
1138<td>
1139                <p>
1140                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
1141                  <span class="keyword">const</span><span class="special">)()</span></code>
1142                </p>
1143              </td>
1144<td>
1145                <p>
1146                  (substitution failure)
1147                </p>
1148              </td>
1149</tr>
1150</tbody>
1151</table></div>
1152<h5>
1153<a name="callable_traits.reference.ref_add_member_rvalue_reference.h5"></a>
1154        <span class="phrase"><a name="callable_traits.reference.ref_add_member_rvalue_reference.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_rvalue_reference.example_program">Example
1155        Program</a>
1156      </h5>
1157<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
1158<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">add_member_rvalue_reference</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1159
1160<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
1161
1162<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">{};</span>
1163
1164<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
1165
1166    <span class="special">{</span>
1167        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)();</span>
1168        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="special">&amp;&amp;;</span>
1169        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_rvalue_reference_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
1170        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
1171    <span class="special">}</span> <span class="special">{</span>
1172        <span class="comment">// add_member_rvalue_reference_t doesn't change anything when</span>
1173        <span class="comment">// the function type already has an rvalue qualifier.</span>
1174        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="special">&amp;&amp;;</span>
1175        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="special">&amp;&amp;;</span>
1176        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_rvalue_reference_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
1177        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
1178    <span class="special">}</span> <span class="special">{</span>
1179        <span class="comment">// add_member_rvalue_reference_t models C++11 reference collapsing</span>
1180        <span class="comment">// rules, so that adding an rvalue qualifier to an</span>
1181        <span class="comment">// lvalue-qualified type will not change anything.</span>
1182        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="special">&amp;;</span>
1183        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="special">&amp;;</span>
1184        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_rvalue_reference_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
1185        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
1186    <span class="special">}</span> <span class="special">{</span>
1187        <span class="comment">// add_member_rvalue_reference_t can also be used with "abominable"</span>
1188        <span class="comment">// function types.</span>
1189        <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
1190        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">&amp;&amp;;</span>
1191        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_rvalue_reference_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">&gt;;</span>
1192        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
1193    <span class="special">}</span>
1194<span class="special">}</span>
1195</pre>
1196</div>
1197<div class="section">
1198<div class="titlepage"><div><div><h3 class="title">
1199<a name="callable_traits.reference.ref_add_member_volatile"></a><a class="link" href="reference.html#callable_traits.reference.ref_add_member_volatile" title="add_member_volatile">add_member_volatile</a>
1200</h3></div></div></div>
1201<h5>
1202<a name="callable_traits.reference.ref_add_member_volatile.h0"></a>
1203        <span class="phrase"><a name="callable_traits.reference.ref_add_member_volatile.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_volatile.header">Header</a>
1204      </h5>
1205<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">add_member_volatile</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
1206<h5>
1207<a name="callable_traits.reference.ref_add_member_volatile.h1"></a>
1208        <span class="phrase"><a name="callable_traits.reference.ref_add_member_volatile.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_volatile.definition">Definition</a>
1209      </h5>
1210<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
1211<span class="keyword">using</span> <span class="identifier">add_member_volatile_t</span> <span class="special">=</span> <span class="comment">//see below</span>
1212
1213<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
1214<span class="keyword">struct</span> <span class="identifier">add_member_volatile</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">add_member_volatile_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
1215</pre>
1216<h5>
1217<a name="callable_traits.reference.ref_add_member_volatile.h2"></a>
1218        <span class="phrase"><a name="callable_traits.reference.ref_add_member_volatile.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_volatile.constraints">Constraints</a>
1219      </h5>
1220<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1221<li class="listitem">
1222            <code class="computeroutput"><span class="identifier">T</span></code> must be a function
1223            type or a member function pointer type
1224          </li>
1225<li class="listitem">
1226            If <code class="computeroutput"><span class="identifier">T</span></code> is a pointer, it
1227            may not be cv/ref qualified
1228          </li>
1229</ul></div>
1230<h5>
1231<a name="callable_traits.reference.ref_add_member_volatile.h3"></a>
1232        <span class="phrase"><a name="callable_traits.reference.ref_add_member_volatile.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_volatile.behavior">Behavior</a>
1233      </h5>
1234<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1235<li class="listitem">
1236            A substitution failure occurs if the constraints are violated.
1237          </li>
1238<li class="listitem">
1239            Adds a member volatile qualifier to <code class="computeroutput"><span class="identifier">T</span></code>,
1240            if not already present.
1241          </li>
1242</ul></div>
1243<h5>
1244<a name="callable_traits.reference.ref_add_member_volatile.h4"></a>
1245        <span class="phrase"><a name="callable_traits.reference.ref_add_member_volatile.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_volatile.input_output_examples">Input/Output
1246        Examples</a>
1247      </h5>
1248<div class="informaltable"><table class="table">
1249<colgroup>
1250<col>
1251<col>
1252</colgroup>
1253<thead><tr>
1254<th>
1255                <p>
1256                  <code class="computeroutput"><span class="identifier">T</span></code>
1257                </p>
1258              </th>
1259<th>
1260                <p>
1261                  <code class="computeroutput"><span class="identifier">add_member_volatile_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
1262                </p>
1263              </th>
1264</tr></thead>
1265<tbody>
1266<tr>
1267<td>
1268                <p>
1269                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
1270                </p>
1271              </td>
1272<td>
1273                <p>
1274                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
1275                  <span class="keyword">volatile</span></code>
1276                </p>
1277              </td>
1278</tr>
1279<tr>
1280<td>
1281                <p>
1282                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
1283                </p>
1284              </td>
1285<td>
1286                <p>
1287                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1288                  <span class="keyword">volatile</span></code>
1289                </p>
1290              </td>
1291</tr>
1292<tr>
1293<td>
1294                <p>
1295                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1296                  <span class="special">&amp;</span></code>
1297                </p>
1298              </td>
1299<td>
1300                <p>
1301                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1302                  <span class="keyword">volatile</span> <span class="special">&amp;</span></code>
1303                </p>
1304              </td>
1305</tr>
1306<tr>
1307<td>
1308                <p>
1309                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1310                  <span class="special">&amp;&amp;</span></code>
1311                </p>
1312              </td>
1313<td>
1314                <p>
1315                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1316                  <span class="keyword">volatile</span> <span class="special">&amp;&amp;</span></code>
1317                </p>
1318              </td>
1319</tr>
1320<tr>
1321<td>
1322                <p>
1323                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1324                  <span class="keyword">const</span></code>
1325                </p>
1326              </td>
1327<td>
1328                <p>
1329                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1330                  <span class="keyword">const</span> <span class="keyword">volatile</span></code>
1331                </p>
1332              </td>
1333</tr>
1334<tr>
1335<td>
1336                <p>
1337                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1338                  <span class="identifier">transaction_safe</span></code>
1339                </p>
1340              </td>
1341<td>
1342                <p>
1343                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1344                  <span class="keyword">volatile</span> <span class="identifier">transaction_safe</span></code>
1345                </p>
1346              </td>
1347</tr>
1348<tr>
1349<td>
1350                <p>
1351                  <code class="computeroutput"><span class="keyword">int</span></code>
1352                </p>
1353              </td>
1354<td>
1355                <p>
1356                  (substitution failure)
1357                </p>
1358              </td>
1359</tr>
1360<tr>
1361<td>
1362                <p>
1363                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(&amp;)()</span></code>
1364                </p>
1365              </td>
1366<td>
1367                <p>
1368                  (substitution failure)
1369                </p>
1370              </td>
1371</tr>
1372<tr>
1373<td>
1374                <p>
1375                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)()</span></code>
1376                </p>
1377              </td>
1378<td>
1379                <p>
1380                  (substitution failure)
1381                </p>
1382              </td>
1383</tr>
1384<tr>
1385<td>
1386                <p>
1387                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
1388                </p>
1389              </td>
1390<td>
1391                <p>
1392                  (substitution failure)
1393                </p>
1394              </td>
1395</tr>
1396<tr>
1397<td>
1398                <p>
1399                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
1400                  <span class="keyword">const</span><span class="special">)()</span></code>
1401                </p>
1402              </td>
1403<td>
1404                <p>
1405                  (substitution failure)
1406                </p>
1407              </td>
1408</tr>
1409</tbody>
1410</table></div>
1411<h5>
1412<a name="callable_traits.reference.ref_add_member_volatile.h5"></a>
1413        <span class="phrase"><a name="callable_traits.reference.ref_add_member_volatile.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_member_volatile.example_program">Example
1414        Program</a>
1415      </h5>
1416<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
1417<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">add_member_volatile</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1418
1419<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
1420
1421<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">{};</span>
1422
1423<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
1424
1425    <span class="special">{</span>
1426        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)();</span>
1427        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">volatile</span><span class="special">;</span>
1428        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_volatile_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
1429        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
1430    <span class="special">}</span> <span class="special">{</span>
1431        <span class="comment">// add_member_volatile_t doesn't change anything when</span>
1432        <span class="comment">// the function type is already volatile.</span>
1433        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">volatile</span> <span class="special">&amp;&amp;;</span>
1434        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">volatile</span> <span class="special">&amp;&amp;;</span>
1435        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_volatile_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
1436        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
1437    <span class="special">}</span> <span class="special">{</span>
1438        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="special">&amp;;</span>
1439        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="special">&amp;;</span>
1440        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_volatile_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
1441        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
1442    <span class="special">}</span> <span class="special">{</span>
1443        <span class="comment">// add_member_volatile_t can also be used with "abominable"</span>
1444        <span class="comment">// function types.</span>
1445        <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">();</span>
1446        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">()</span> <span class="keyword">volatile</span><span class="special">;</span>
1447        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_volatile_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">&gt;;</span>
1448        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
1449    <span class="special">}</span>
1450<span class="special">}</span>
1451</pre>
1452</div>
1453<div class="section">
1454<div class="titlepage"><div><div><h3 class="title">
1455<a name="callable_traits.reference.ref_add_noexcept"></a><a class="link" href="reference.html#callable_traits.reference.ref_add_noexcept" title="add_noexcept">add_noexcept</a>
1456</h3></div></div></div>
1457<h5>
1458<a name="callable_traits.reference.ref_add_noexcept.h0"></a>
1459        <span class="phrase"><a name="callable_traits.reference.ref_add_noexcept.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_noexcept.header">Header</a>
1460      </h5>
1461<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">add_noexcept</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
1462<h5>
1463<a name="callable_traits.reference.ref_add_noexcept.h1"></a>
1464        <span class="phrase"><a name="callable_traits.reference.ref_add_noexcept.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_noexcept.definition">Definition</a>
1465      </h5>
1466<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
1467<span class="keyword">using</span> <span class="identifier">add_noexcept_t</span> <span class="special">=</span> <span class="comment">//see below</span>
1468
1469<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
1470<span class="keyword">struct</span> <span class="identifier">add_noexcept</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">add_noexcept_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
1471</pre>
1472<h5>
1473<a name="callable_traits.reference.ref_add_noexcept.h2"></a>
1474        <span class="phrase"><a name="callable_traits.reference.ref_add_noexcept.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_noexcept.constraints">Constraints</a>
1475      </h5>
1476<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1477<li class="listitem">
1478            <code class="computeroutput"><span class="identifier">T</span></code> must be one of the
1479            following:
1480            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
1481<li class="listitem">
1482                  function type
1483                </li>
1484<li class="listitem">
1485                  function pointer type
1486                </li>
1487<li class="listitem">
1488                  function reference type
1489                </li>
1490<li class="listitem">
1491                  member function pointer type
1492                </li>
1493</ul></div>
1494          </li>
1495<li class="listitem">
1496            If <code class="computeroutput"><span class="identifier">T</span></code> is a pointer, it
1497            may not be cv/ref qualified
1498          </li>
1499</ul></div>
1500<h5>
1501<a name="callable_traits.reference.ref_add_noexcept.h3"></a>
1502        <span class="phrase"><a name="callable_traits.reference.ref_add_noexcept.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_noexcept.behavior">Behavior</a>
1503      </h5>
1504<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1505<li class="listitem">
1506            A substitution failure occurs if the constraints are violated.
1507          </li>
1508<li class="listitem">
1509            Adds a <code class="computeroutput"><span class="keyword">noexcept</span></code> specifier
1510            to <code class="computeroutput"><span class="identifier">T</span></code>, if not already
1511            present.
1512          </li>
1513</ul></div>
1514<h5>
1515<a name="callable_traits.reference.ref_add_noexcept.h4"></a>
1516        <span class="phrase"><a name="callable_traits.reference.ref_add_noexcept.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_noexcept.input_output_examples">Input/Output
1517        Examples</a>
1518      </h5>
1519<div class="informaltable"><table class="table">
1520<colgroup>
1521<col>
1522<col>
1523</colgroup>
1524<thead><tr>
1525<th>
1526                <p>
1527                  <code class="computeroutput"><span class="identifier">T</span></code>
1528                </p>
1529              </th>
1530<th>
1531                <p>
1532                  <code class="computeroutput"><span class="identifier">add_noexcept_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
1533                </p>
1534              </th>
1535</tr></thead>
1536<tbody>
1537<tr>
1538<td>
1539                <p>
1540                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
1541                </p>
1542              </td>
1543<td>
1544                <p>
1545                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
1546                  <span class="keyword">noexcept</span></code>
1547                </p>
1548              </td>
1549</tr>
1550<tr>
1551<td>
1552                <p>
1553                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(&amp;)()</span></code>
1554                </p>
1555              </td>
1556<td>
1557                <p>
1558                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(&amp;)()</span>
1559                  <span class="keyword">noexcept</span></code>
1560                </p>
1561              </td>
1562</tr>
1563<tr>
1564<td>
1565                <p>
1566                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)()</span></code>
1567                </p>
1568              </td>
1569<td>
1570                <p>
1571                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span>
1572                  <span class="keyword">noexcept</span></code>
1573                </p>
1574              </td>
1575</tr>
1576<tr>
1577<td>
1578                <p>
1579                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
1580                </p>
1581              </td>
1582<td>
1583                <p>
1584                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1585                  <span class="keyword">noexcept</span></code>
1586                </p>
1587              </td>
1588</tr>
1589<tr>
1590<td>
1591                <p>
1592                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1593                  <span class="special">&amp;</span></code>
1594                </p>
1595              </td>
1596<td>
1597                <p>
1598                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1599                  <span class="special">&amp;</span> <span class="keyword">noexcept</span></code>
1600                </p>
1601              </td>
1602</tr>
1603<tr>
1604<td>
1605                <p>
1606                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1607                  <span class="special">&amp;&amp;</span></code>
1608                </p>
1609              </td>
1610<td>
1611                <p>
1612                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1613                  <span class="special">&amp;&amp;</span> <span class="keyword">noexcept</span></code>
1614                </p>
1615              </td>
1616</tr>
1617<tr>
1618<td>
1619                <p>
1620                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1621                  <span class="keyword">const</span> <span class="identifier">transaction_safe</span></code>
1622                </p>
1623              </td>
1624<td>
1625                <p>
1626                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1627                  <span class="keyword">const</span> <span class="identifier">transaction_safe</span>
1628                  <span class="keyword">noexcept</span></code>
1629                </p>
1630              </td>
1631</tr>
1632<tr>
1633<td>
1634                <p>
1635                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1636                  <span class="keyword">noexcept</span></code>
1637                </p>
1638              </td>
1639<td>
1640                <p>
1641                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1642                  <span class="keyword">noexcept</span></code>
1643                </p>
1644              </td>
1645</tr>
1646<tr>
1647<td>
1648                <p>
1649                  <code class="computeroutput"><span class="keyword">int</span></code>
1650                </p>
1651              </td>
1652<td>
1653                <p>
1654                  (substitution failure)
1655                </p>
1656              </td>
1657</tr>
1658<tr>
1659<td>
1660                <p>
1661                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
1662                </p>
1663              </td>
1664<td>
1665                <p>
1666                  (substitution failure)
1667                </p>
1668              </td>
1669</tr>
1670<tr>
1671<td>
1672                <p>
1673                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*&amp;)()</span></code>
1674                </p>
1675              </td>
1676<td>
1677                <p>
1678                  (substitution failure)
1679                </p>
1680              </td>
1681</tr>
1682</tbody>
1683</table></div>
1684<h5>
1685<a name="callable_traits.reference.ref_add_noexcept.h5"></a>
1686        <span class="phrase"><a name="callable_traits.reference.ref_add_noexcept.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_noexcept.example_program">Example
1687        Program</a>
1688      </h5>
1689<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
1690<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">add_noexcept</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1691
1692<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">::</span><span class="identifier">add_noexcept_t</span><span class="special">;</span>
1693
1694<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
1695    <span class="identifier">add_noexcept_t</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()&gt;,</span>
1696    <span class="keyword">int</span><span class="special">()</span> <span class="keyword">noexcept</span>
1697<span class="special">&gt;{},</span> <span class="string">""</span><span class="special">);</span>
1698
1699<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
1700</pre>
1701</div>
1702<div class="section">
1703<div class="titlepage"><div><div><h3 class="title">
1704<a name="callable_traits.reference.ref_add_transaction_safe"></a><a class="link" href="reference.html#callable_traits.reference.ref_add_transaction_safe" title="add_transaction_safe">add_transaction_safe</a>
1705</h3></div></div></div>
1706<h5>
1707<a name="callable_traits.reference.ref_add_transaction_safe.h0"></a>
1708        <span class="phrase"><a name="callable_traits.reference.ref_add_transaction_safe.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_transaction_safe.header">Header</a>
1709      </h5>
1710<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">add_transaction_safe</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
1711<h5>
1712<a name="callable_traits.reference.ref_add_transaction_safe.h1"></a>
1713        <span class="phrase"><a name="callable_traits.reference.ref_add_transaction_safe.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_transaction_safe.definition">Definition</a>
1714      </h5>
1715<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
1716<span class="keyword">using</span> <span class="identifier">add_transaction_safe_t</span> <span class="special">=</span> <span class="comment">//see below</span>
1717
1718<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
1719<span class="keyword">struct</span> <span class="identifier">add_transaction_safe</span>
1720  <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">add_transaction_safe_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
1721</pre>
1722<h5>
1723<a name="callable_traits.reference.ref_add_transaction_safe.h2"></a>
1724        <span class="phrase"><a name="callable_traits.reference.ref_add_transaction_safe.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_transaction_safe.constraints">Constraints</a>
1725      </h5>
1726<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1727<li class="listitem">
1728            <code class="computeroutput"><span class="identifier">T</span></code> must be one of the
1729            following:
1730            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
1731<li class="listitem">
1732                  function type
1733                </li>
1734<li class="listitem">
1735                  function pointer type
1736                </li>
1737<li class="listitem">
1738                  function reference type
1739                </li>
1740<li class="listitem">
1741                  member function pointer type
1742                </li>
1743</ul></div>
1744          </li>
1745<li class="listitem">
1746            If <code class="computeroutput"><span class="identifier">T</span></code> is a pointer, it
1747            may not be cv/ref qualified
1748          </li>
1749</ul></div>
1750<h5>
1751<a name="callable_traits.reference.ref_add_transaction_safe.h3"></a>
1752        <span class="phrase"><a name="callable_traits.reference.ref_add_transaction_safe.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_transaction_safe.behavior">Behavior</a>
1753      </h5>
1754<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1755<li class="listitem">
1756            A substitution failure occurs if the constraints are violated.
1757          </li>
1758<li class="listitem">
1759            Adds the <code class="computeroutput"><span class="identifier">transaction_safe</span></code>
1760            specifier to <code class="computeroutput"><span class="identifier">T</span></code>, if not
1761            already present.
1762          </li>
1763</ul></div>
1764<h5>
1765<a name="callable_traits.reference.ref_add_transaction_safe.h4"></a>
1766        <span class="phrase"><a name="callable_traits.reference.ref_add_transaction_safe.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_transaction_safe.input_output_examples">Input/Output
1767        Examples</a>
1768      </h5>
1769<div class="informaltable"><table class="table">
1770<colgroup>
1771<col>
1772<col>
1773</colgroup>
1774<thead><tr>
1775<th>
1776                <p>
1777                  <code class="computeroutput"><span class="identifier">T</span></code>
1778                </p>
1779              </th>
1780<th>
1781                <p>
1782                  <code class="computeroutput"><span class="identifier">add_transaction_safe_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
1783                </p>
1784              </th>
1785</tr></thead>
1786<tbody>
1787<tr>
1788<td>
1789                <p>
1790                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
1791                </p>
1792              </td>
1793<td>
1794                <p>
1795                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
1796                  <span class="identifier">transaction_safe</span></code>
1797                </p>
1798              </td>
1799</tr>
1800<tr>
1801<td>
1802                <p>
1803                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(&amp;)()</span></code>
1804                </p>
1805              </td>
1806<td>
1807                <p>
1808                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(&amp;)()</span>
1809                  <span class="identifier">transaction_safe</span></code>
1810                </p>
1811              </td>
1812</tr>
1813<tr>
1814<td>
1815                <p>
1816                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)()</span></code>
1817                </p>
1818              </td>
1819<td>
1820                <p>
1821                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span>
1822                  <span class="identifier">transaction_safe</span></code>
1823                </p>
1824              </td>
1825</tr>
1826<tr>
1827<td>
1828                <p>
1829                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
1830                </p>
1831              </td>
1832<td>
1833                <p>
1834                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1835                  <span class="identifier">transaction_safe</span></code>
1836                </p>
1837              </td>
1838</tr>
1839<tr>
1840<td>
1841                <p>
1842                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1843                  <span class="special">&amp;</span></code>
1844                </p>
1845              </td>
1846<td>
1847                <p>
1848                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1849                  <span class="special">&amp;</span> <span class="identifier">transaction_safe</span></code>
1850                </p>
1851              </td>
1852</tr>
1853<tr>
1854<td>
1855                <p>
1856                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1857                  <span class="special">&amp;&amp;</span></code>
1858                </p>
1859              </td>
1860<td>
1861                <p>
1862                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1863                  <span class="special">&amp;&amp;</span> <span class="identifier">transaction_safe</span></code>
1864                </p>
1865              </td>
1866</tr>
1867<tr>
1868<td>
1869                <p>
1870                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1871                  <span class="keyword">const</span></code>
1872                </p>
1873              </td>
1874<td>
1875                <p>
1876                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1877                  <span class="keyword">const</span> <span class="identifier">transaction_safe</span></code>
1878                </p>
1879              </td>
1880</tr>
1881<tr>
1882<td>
1883                <p>
1884                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1885                  <span class="identifier">transaction_safe</span></code>
1886                </p>
1887              </td>
1888<td>
1889                <p>
1890                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
1891                  <span class="identifier">transaction_safe</span></code>
1892                </p>
1893              </td>
1894</tr>
1895<tr>
1896<td>
1897                <p>
1898                  <code class="computeroutput"><span class="keyword">int</span></code>
1899                </p>
1900              </td>
1901<td>
1902                <p>
1903                  (substitution failure)
1904                </p>
1905              </td>
1906</tr>
1907<tr>
1908<td>
1909                <p>
1910                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
1911                </p>
1912              </td>
1913<td>
1914                <p>
1915                  (substitution failure)
1916                </p>
1917              </td>
1918</tr>
1919<tr>
1920<td>
1921                <p>
1922                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*&amp;)()</span></code>
1923                </p>
1924              </td>
1925<td>
1926                <p>
1927                  (substitution failure)
1928                </p>
1929              </td>
1930</tr>
1931</tbody>
1932</table></div>
1933<h5>
1934<a name="callable_traits.reference.ref_add_transaction_safe.h5"></a>
1935        <span class="phrase"><a name="callable_traits.reference.ref_add_transaction_safe.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_transaction_safe.example_program">Example
1936        Program</a>
1937      </h5>
1938<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
1939<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">add_transaction_safe</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1940
1941<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">::</span><span class="identifier">add_transaction_safe_t</span><span class="special">;</span>
1942
1943<span class="keyword">using</span> <span class="identifier">not_safe</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">();</span>
1944<span class="keyword">using</span> <span class="identifier">safe</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">()</span> <span class="identifier">transaction_safe</span><span class="special">;</span>
1945<span class="keyword">using</span> <span class="identifier">safe_added</span> <span class="special">=</span> <span class="identifier">add_transaction_safe_t</span><span class="special">&lt;</span><span class="identifier">not_safe</span><span class="special">&gt;;</span>
1946
1947<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">safe</span><span class="special">,</span> <span class="identifier">safe_added</span><span class="special">&gt;{},</span> <span class="string">""</span><span class="special">);</span>
1948
1949<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
1950</pre>
1951</div>
1952<div class="section">
1953<div class="titlepage"><div><div><h3 class="title">
1954<a name="callable_traits.reference.ref_add_varargs"></a><a class="link" href="reference.html#callable_traits.reference.ref_add_varargs" title="add_varargs">add_varargs</a>
1955</h3></div></div></div>
1956<h5>
1957<a name="callable_traits.reference.ref_add_varargs.h0"></a>
1958        <span class="phrase"><a name="callable_traits.reference.ref_add_varargs.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_varargs.header">Header</a>
1959      </h5>
1960<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">add_varargs</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
1961<h5>
1962<a name="callable_traits.reference.ref_add_varargs.h1"></a>
1963        <span class="phrase"><a name="callable_traits.reference.ref_add_varargs.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_varargs.definition">Definition</a>
1964      </h5>
1965<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
1966<span class="keyword">using</span> <span class="identifier">add_varargs_t</span> <span class="special">=</span> <span class="comment">//see below</span>
1967
1968<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
1969<span class="keyword">struct</span> <span class="identifier">add_varargs</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">add_varargs_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
1970</pre>
1971<h5>
1972<a name="callable_traits.reference.ref_add_varargs.h2"></a>
1973        <span class="phrase"><a name="callable_traits.reference.ref_add_varargs.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_varargs.constraints">Constraints</a>
1974      </h5>
1975<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1976<li class="listitem">
1977            <code class="computeroutput"><span class="identifier">T</span></code> must be one of the
1978            following:
1979            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
1980<li class="listitem">
1981                  function type
1982                </li>
1983<li class="listitem">
1984                  function pointer type
1985                </li>
1986<li class="listitem">
1987                  function reference type
1988                </li>
1989<li class="listitem">
1990                  member function pointer type
1991                </li>
1992</ul></div>
1993          </li>
1994<li class="listitem">
1995            If <code class="computeroutput"><span class="identifier">T</span></code> is a pointer, it
1996            may not be cv/ref qualified
1997          </li>
1998</ul></div>
1999<h5>
2000<a name="callable_traits.reference.ref_add_varargs.h3"></a>
2001        <span class="phrase"><a name="callable_traits.reference.ref_add_varargs.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_varargs.behavior">Behavior</a>
2002      </h5>
2003<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2004<li class="listitem">
2005            A substitution failure occurs if the constraints are violated.
2006          </li>
2007<li class="listitem">
2008            Adds C-style variadics (<code class="computeroutput"><span class="special">...</span></code>)
2009            to the signature of <code class="computeroutput"><span class="identifier">T</span></code>,
2010            if not already present.
2011          </li>
2012</ul></div>
2013<h5>
2014<a name="callable_traits.reference.ref_add_varargs.h4"></a>
2015        <span class="phrase"><a name="callable_traits.reference.ref_add_varargs.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_varargs.input_output_examples">Input/Output
2016        Examples</a>
2017      </h5>
2018<div class="informaltable"><table class="table">
2019<colgroup>
2020<col>
2021<col>
2022</colgroup>
2023<thead><tr>
2024<th>
2025                <p>
2026                  <code class="computeroutput"><span class="identifier">T</span></code>
2027                </p>
2028              </th>
2029<th>
2030                <p>
2031                  <code class="computeroutput"><span class="identifier">add_varargs_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
2032                </p>
2033              </th>
2034</tr></thead>
2035<tbody>
2036<tr>
2037<td>
2038                <p>
2039                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
2040                </p>
2041              </td>
2042<td>
2043                <p>
2044                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(...)</span></code>
2045                </p>
2046              </td>
2047</tr>
2048<tr>
2049<td>
2050                <p>
2051                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span></code>
2052                </p>
2053              </td>
2054<td>
2055                <p>
2056                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="special">...)</span></code>
2057                </p>
2058              </td>
2059</tr>
2060<tr>
2061<td>
2062                <p>
2063                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(&amp;)()</span></code>
2064                </p>
2065              </td>
2066<td>
2067                <p>
2068                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(&amp;)(...)</span></code>
2069                </p>
2070              </td>
2071</tr>
2072<tr>
2073<td>
2074                <p>
2075                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)()</span></code>
2076                </p>
2077              </td>
2078<td>
2079                <p>
2080                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)(...)</span></code>
2081                </p>
2082              </td>
2083</tr>
2084<tr>
2085<td>
2086                <p>
2087                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)(...)</span></code>
2088                </p>
2089              </td>
2090<td>
2091                <p>
2092                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)(...)</span></code>
2093                </p>
2094              </td>
2095</tr>
2096<tr>
2097<td>
2098                <p>
2099                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
2100                </p>
2101              </td>
2102<td>
2103                <p>
2104                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(...)</span></code>
2105                </p>
2106              </td>
2107</tr>
2108<tr>
2109<td>
2110                <p>
2111                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
2112                  <span class="special">&amp;</span></code>
2113                </p>
2114              </td>
2115<td>
2116                <p>
2117                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(...)</span>
2118                  <span class="special">&amp;</span></code>
2119                </p>
2120              </td>
2121</tr>
2122<tr>
2123<td>
2124                <p>
2125                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
2126                  <span class="special">&amp;&amp;</span></code>
2127                </p>
2128              </td>
2129<td>
2130                <p>
2131                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(...)</span>
2132                  <span class="special">&amp;&amp;</span></code>
2133                </p>
2134              </td>
2135</tr>
2136<tr>
2137<td>
2138                <p>
2139                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
2140                  <span class="keyword">const</span></code>
2141                </p>
2142              </td>
2143<td>
2144                <p>
2145                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(...)</span>
2146                  <span class="keyword">const</span></code>
2147                </p>
2148              </td>
2149</tr>
2150<tr>
2151<td>
2152                <p>
2153                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
2154                  <span class="identifier">transaction_safe</span></code>
2155                </p>
2156              </td>
2157<td>
2158                <p>
2159                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(...)</span>
2160                  <span class="identifier">transaction_safe</span></code>
2161                </p>
2162              </td>
2163</tr>
2164<tr>
2165<td>
2166                <p>
2167                  <code class="computeroutput"><span class="keyword">int</span></code>
2168                </p>
2169              </td>
2170<td>
2171                <p>
2172                  (substitution failure)
2173                </p>
2174              </td>
2175</tr>
2176<tr>
2177<td>
2178                <p>
2179                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
2180                </p>
2181              </td>
2182<td>
2183                <p>
2184                  (substitution failure)
2185                </p>
2186              </td>
2187</tr>
2188<tr>
2189<td>
2190                <p>
2191                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*&amp;)()</span></code>
2192                </p>
2193              </td>
2194<td>
2195                <p>
2196                  (substitution failure)
2197                </p>
2198              </td>
2199</tr>
2200</tbody>
2201</table></div>
2202<h5>
2203<a name="callable_traits.reference.ref_add_varargs.h5"></a>
2204        <span class="phrase"><a name="callable_traits.reference.ref_add_varargs.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_add_varargs.example_program">Example
2205        Program</a>
2206      </h5>
2207<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
2208<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">add_varargs</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2209
2210<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
2211
2212<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">{};</span>
2213
2214<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
2215
2216    <span class="special">{</span>
2217        <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">);</span>
2218        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="special">...);</span>
2219        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_varargs_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">&gt;;</span>
2220        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
2221    <span class="special">}</span> <span class="special">{</span>
2222        <span class="keyword">using</span> <span class="identifier">fp</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(*)();</span>
2223        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(*)(...);</span>
2224        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_varargs_t</span><span class="special">&lt;</span><span class="identifier">fp</span><span class="special">&gt;;</span>
2225        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
2226    <span class="special">}</span> <span class="special">{</span>
2227        <span class="keyword">using</span> <span class="identifier">fr</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(&amp;)(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*);</span>
2228        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(&amp;)(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*,</span> <span class="special">...);</span>
2229        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_varargs_t</span><span class="special">&lt;</span><span class="identifier">fr</span><span class="special">&gt;;</span>
2230        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
2231    <span class="special">}</span> <span class="special">{</span>
2232        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span><span class="special">;</span>
2233        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(...)</span> <span class="keyword">const</span><span class="special">;</span>
2234        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_varargs_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
2235        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
2236
2237        <span class="comment">// add_varargs_t doesn't change anything when</span>
2238        <span class="comment">// the type already has varargs.</span>
2239        <span class="keyword">using</span> <span class="identifier">twice</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_varargs_t</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">&gt;;</span>
2240        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">twice</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
2241    <span class="special">}</span>
2242<span class="special">}</span>
2243</pre>
2244</div>
2245<div class="section">
2246<div class="titlepage"><div><div><h3 class="title">
2247<a name="callable_traits.reference.ref_apply_member_pointer"></a><a class="link" href="reference.html#callable_traits.reference.ref_apply_member_pointer" title="apply_member_pointer">apply_member_pointer</a>
2248</h3></div></div></div>
2249<h5>
2250<a name="callable_traits.reference.ref_apply_member_pointer.h0"></a>
2251        <span class="phrase"><a name="callable_traits.reference.ref_apply_member_pointer.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_apply_member_pointer.header">Header</a>
2252      </h5>
2253<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">apply_member_pointer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
2254<h5>
2255<a name="callable_traits.reference.ref_apply_member_pointer.h1"></a>
2256        <span class="phrase"><a name="callable_traits.reference.ref_apply_member_pointer.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_apply_member_pointer.definition">Definition</a>
2257      </h5>
2258<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">C</span><span class="special">&gt;</span>
2259<span class="keyword">using</span> <span class="identifier">apply_member_pointer_t</span> <span class="special">=</span> <span class="comment">//see below</span>
2260
2261<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">C</span><span class="special">&gt;</span>
2262<span class="keyword">struct</span> <span class="identifier">apply_member_pointer</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">apply_member_pointer_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">C</span><span class="special">&gt;</span> <span class="special">{};</span>
2263</pre>
2264<h5>
2265<a name="callable_traits.reference.ref_apply_member_pointer.h2"></a>
2266        <span class="phrase"><a name="callable_traits.reference.ref_apply_member_pointer.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_apply_member_pointer.constraints">Constraints</a>
2267      </h5>
2268<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2269<li class="listitem">
2270            <code class="computeroutput"><span class="identifier">T</span></code> may be any type except
2271            <code class="computeroutput"><span class="keyword">void</span></code>
2272          </li>
2273<li class="listitem">
2274            <code class="computeroutput"><span class="identifier">C</span></code> must be a user-defined
2275            type
2276          </li>
2277</ul></div>
2278<h5>
2279<a name="callable_traits.reference.ref_apply_member_pointer.h3"></a>
2280        <span class="phrase"><a name="callable_traits.reference.ref_apply_member_pointer.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_apply_member_pointer.behavior">Behavior</a>
2281      </h5>
2282<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2283<li class="listitem">
2284            A substitution failure occurs if the constraints are violated.
2285          </li>
2286<li class="listitem">
2287            When <code class="computeroutput"><span class="identifier">T</span></code> is a function,
2288            function pointer (unqualified), or function reference, then the aliased
2289            type is a member function pointer of <code class="computeroutput"><span class="identifier">C</span></code>
2290            with the same parameters and return type.
2291          </li>
2292<li class="listitem">
2293            When <code class="computeroutput"><span class="identifier">T</span></code> is a member function
2294            pointer (unqualified) of any type, the aliased type is a member function
2295            pointer of <code class="computeroutput"><span class="identifier">C</span></code> with the
2296            same parameters and return type.
2297          </li>
2298<li class="listitem">
2299            Otherwise, the aliased type is a member data pointer equivalent to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">remove_reference_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">C</span><span class="special">::*</span></code>.
2300          </li>
2301</ul></div>
2302<h5>
2303<a name="callable_traits.reference.ref_apply_member_pointer.h4"></a>
2304        <span class="phrase"><a name="callable_traits.reference.ref_apply_member_pointer.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_apply_member_pointer.input_output_examples">Input/Output
2305        Examples</a>
2306      </h5>
2307<div class="informaltable"><table class="table">
2308<colgroup>
2309<col>
2310<col>
2311</colgroup>
2312<thead><tr>
2313<th>
2314                <p>
2315                  <code class="computeroutput"><span class="identifier">T</span></code>
2316                </p>
2317              </th>
2318<th>
2319                <p>
2320                  <code class="computeroutput"><span class="identifier">apply_member_pointer_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">&gt;</span></code>
2321                </p>
2322              </th>
2323</tr></thead>
2324<tbody>
2325<tr>
2326<td>
2327                <p>
2328                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
2329                </p>
2330              </td>
2331<td>
2332                <p>
2333                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
2334                </p>
2335              </td>
2336</tr>
2337<tr>
2338<td>
2339                <p>
2340                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(&amp;)()</span></code>
2341                </p>
2342              </td>
2343<td>
2344                <p>
2345                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
2346                </p>
2347              </td>
2348</tr>
2349<tr>
2350<td>
2351                <p>
2352                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)()</span></code>
2353                </p>
2354              </td>
2355<td>
2356                <p>
2357                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
2358                </p>
2359              </td>
2360</tr>
2361<tr>
2362<td>
2363                <p>
2364                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">bar</span><span class="special">::*)()</span></code>
2365                </p>
2366              </td>
2367<td>
2368                <p>
2369                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
2370                </p>
2371              </td>
2372</tr>
2373<tr>
2374<td>
2375                <p>
2376                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">bar</span><span class="special">::*)()</span>
2377                  <span class="special">&amp;</span></code>
2378                </p>
2379              </td>
2380<td>
2381                <p>
2382                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
2383                  <span class="special">&amp;</span></code>
2384                </p>
2385              </td>
2386</tr>
2387<tr>
2388<td>
2389                <p>
2390                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">bar</span><span class="special">::*)()</span>
2391                  <span class="special">&amp;&amp;</span></code>
2392                </p>
2393              </td>
2394<td>
2395                <p>
2396                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
2397                  <span class="special">&amp;&amp;</span></code>
2398                </p>
2399              </td>
2400</tr>
2401<tr>
2402<td>
2403                <p>
2404                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">bar</span><span class="special">::*)()</span>
2405                  <span class="keyword">const</span></code>
2406                </p>
2407              </td>
2408<td>
2409                <p>
2410                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
2411                  <span class="keyword">const</span></code>
2412                </p>
2413              </td>
2414</tr>
2415<tr>
2416<td>
2417                <p>
2418                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">bar</span><span class="special">::*)()</span>
2419                  <span class="identifier">transaction_safe</span></code>
2420                </p>
2421              </td>
2422<td>
2423                <p>
2424                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
2425                  <span class="identifier">transaction_safe</span></code>
2426                </p>
2427              </td>
2428</tr>
2429<tr>
2430<td>
2431                <p>
2432                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">bar</span><span class="special">::*</span></code>
2433                </p>
2434              </td>
2435<td>
2436                <p>
2437                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
2438                </p>
2439              </td>
2440</tr>
2441<tr>
2442<td>
2443                <p>
2444                  <code class="computeroutput"><span class="keyword">int</span></code>
2445                </p>
2446              </td>
2447<td>
2448                <p>
2449                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
2450                </p>
2451              </td>
2452</tr>
2453<tr>
2454<td>
2455                <p>
2456                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">&amp;</span></code>
2457                </p>
2458              </td>
2459<td>
2460                <p>
2461                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
2462                </p>
2463              </td>
2464</tr>
2465<tr>
2466<td>
2467                <p>
2468                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">int</span>
2469                  <span class="special">&amp;</span></code>
2470                </p>
2471              </td>
2472<td>
2473                <p>
2474                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">int</span>
2475                  <span class="identifier">foo</span><span class="special">::*</span></code>
2476                </p>
2477              </td>
2478</tr>
2479<tr>
2480<td>
2481                <p>
2482                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*</span><span class="keyword">const</span><span class="special">)()</span></code>
2483                </p>
2484              </td>
2485<td>
2486                <p>
2487                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*</span><span class="keyword">const</span> <span class="identifier">foo</span><span class="special">::*)()</span></code>
2488                </p>
2489              </td>
2490</tr>
2491<tr>
2492<td>
2493                <p>
2494                  <code class="computeroutput"><span class="keyword">void</span></code>
2495                </p>
2496              </td>
2497<td>
2498                <p>
2499                  (substitution failure)
2500                </p>
2501              </td>
2502</tr>
2503</tbody>
2504</table></div>
2505<h5>
2506<a name="callable_traits.reference.ref_apply_member_pointer.h5"></a>
2507        <span class="phrase"><a name="callable_traits.reference.ref_apply_member_pointer.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_apply_member_pointer.example_program">Example
2508        Program</a>
2509      </h5>
2510<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
2511<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">apply_member_pointer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2512
2513<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
2514
2515<span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">;</span>
2516<span class="keyword">struct</span> <span class="identifier">bar</span><span class="special">;</span>
2517
2518<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
2519
2520    <span class="special">{</span>
2521        <span class="comment">// function type -&gt; member function pointer type</span>
2522        <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="keyword">int</span><span class="special">);</span>
2523        <span class="keyword">using</span> <span class="identifier">g</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">apply_member_pointer_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">&gt;;</span>
2524        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(</span><span class="keyword">int</span><span class="special">);</span>
2525        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
2526    <span class="special">}</span>
2527
2528    <span class="special">{</span>
2529        <span class="comment">// function pointer type (unqualified) -&gt; member function pointer type</span>
2530        <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(*)();</span>
2531        <span class="keyword">using</span> <span class="identifier">g</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">apply_member_pointer_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">&gt;;</span>
2532        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)();</span>
2533        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
2534    <span class="special">}</span>
2535
2536
2537    <span class="special">{</span>
2538        <span class="comment">// function pointer type (qualified) -&gt; member data pointer type</span>
2539
2540        <span class="comment">// Look out for cases like these two. If the input type to apply_member_pointer</span>
2541        <span class="comment">// is a <span class="bold"><strong>qualified</strong></span> function pointer type, then the  aliased type is a member data</span>
2542        <span class="comment">// pointer to a <span class="bold"><strong>qualified function pointer</strong></span>.</span>
2543
2544        <span class="special">{</span>
2545            <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(*&amp;)();</span>
2546            <span class="keyword">using</span> <span class="identifier">g</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">apply_member_pointer_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">&gt;;</span>
2547            <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span> <span class="special">(*</span> <span class="identifier">foo</span><span class="special">::*)();</span>
2548            <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
2549        <span class="special">}</span>
2550
2551        <span class="special">{</span>
2552            <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(*</span> <span class="keyword">const</span><span class="special">)();</span>
2553            <span class="keyword">using</span> <span class="identifier">g</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">apply_member_pointer_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">&gt;;</span>
2554            <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span> <span class="special">(*</span> <span class="keyword">const</span> <span class="identifier">foo</span><span class="special">::*)();</span>
2555            <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
2556        <span class="special">}</span>
2557    <span class="special">}</span>
2558
2559    <span class="special">{</span>
2560        <span class="comment">// function reference type -&gt; member function pointer type</span>
2561        <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(&amp;)();</span>
2562        <span class="keyword">using</span> <span class="identifier">g</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">apply_member_pointer_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">&gt;;</span>
2563        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)();</span>
2564        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
2565    <span class="special">}</span>
2566
2567    <span class="special">{</span>
2568        <span class="comment">// member function pointer type -&gt; member function pointer type</span>
2569        <span class="comment">// (note the different parent class)</span>
2570        <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">bar</span><span class="special">::*)()</span> <span class="keyword">const</span><span class="special">;</span>
2571        <span class="keyword">using</span> <span class="identifier">g</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">apply_member_pointer_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">&gt;;</span>
2572        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span><span class="special">;</span>
2573        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
2574    <span class="special">}</span>
2575
2576    <span class="special">{</span>
2577        <span class="comment">// non-callable type -&gt; member data pointer type</span>
2578        <span class="keyword">using</span> <span class="identifier">g</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">apply_member_pointer_t</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">&gt;;</span>
2579        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*;</span>
2580        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
2581    <span class="special">}</span>
2582
2583
2584    <span class="special">{</span>
2585        <span class="comment">// function object type -&gt; member data pointer type</span>
2586        <span class="comment">// the same is true for lambdas and generic lambdas</span>
2587        <span class="keyword">auto</span> <span class="identifier">lambda</span> <span class="special">=</span> <span class="special">[](){};</span>
2588        <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">decltype</span><span class="special">(</span><span class="identifier">lambda</span><span class="special">);</span>
2589        <span class="keyword">using</span> <span class="identifier">g</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">apply_member_pointer_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">&gt;;</span>
2590        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="identifier">f</span> <span class="identifier">foo</span><span class="special">::*;</span>
2591        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
2592    <span class="special">}</span>
2593<span class="special">}</span>
2594</pre>
2595</div>
2596<div class="section">
2597<div class="titlepage"><div><div><h3 class="title">
2598<a name="callable_traits.reference.ref_apply_return"></a><a class="link" href="reference.html#callable_traits.reference.ref_apply_return" title="apply_return">apply_return</a>
2599</h3></div></div></div>
2600<h5>
2601<a name="callable_traits.reference.ref_apply_return.h0"></a>
2602        <span class="phrase"><a name="callable_traits.reference.ref_apply_return.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_apply_return.header">Header</a>
2603      </h5>
2604<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">apply_return</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
2605<h5>
2606<a name="callable_traits.reference.ref_apply_return.h1"></a>
2607        <span class="phrase"><a name="callable_traits.reference.ref_apply_return.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_apply_return.definition">Definition</a>
2608      </h5>
2609<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span>
2610<span class="keyword">using</span> <span class="identifier">apply_return_t</span> <span class="special">=</span> <span class="comment">//see below</span>
2611
2612<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span>
2613<span class="keyword">struct</span> <span class="identifier">apply_return</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">apply_return_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="special">{};</span>
2614</pre>
2615<h5>
2616<a name="callable_traits.reference.ref_apply_return.h2"></a>
2617        <span class="phrase"><a name="callable_traits.reference.ref_apply_return.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_apply_return.constraints">Constraints</a>
2618      </h5>
2619<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2620<li class="listitem">
2621            <code class="computeroutput"><span class="identifier">T</span></code> must one of the following:
2622            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
2623<li class="listitem">
2624                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span></code> template instantiation
2625                </li>
2626<li class="listitem">
2627                  function
2628                </li>
2629<li class="listitem">
2630                  function pointer
2631                </li>
2632<li class="listitem">
2633                  function reference
2634                </li>
2635<li class="listitem">
2636                  member function pointer
2637                </li>
2638<li class="listitem">
2639                  member data pointer
2640                </li>
2641</ul></div>
2642          </li>
2643<li class="listitem">
2644            If <code class="computeroutput"><span class="identifier">T</span></code> is a pointer, it
2645            may not be cv/ref qualified
2646          </li>
2647</ul></div>
2648<h5>
2649<a name="callable_traits.reference.ref_apply_return.h3"></a>
2650        <span class="phrase"><a name="callable_traits.reference.ref_apply_return.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_apply_return.behavior">Behavior</a>
2651      </h5>
2652<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2653<li class="listitem">
2654            When <code class="computeroutput"><span class="identifier">T</span></code> is <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">...&gt;</span></code>,
2655            the aliased type is <code class="computeroutput"><span class="identifier">R</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span></code>.
2656          </li>
2657<li class="listitem">
2658            When <code class="computeroutput"><span class="identifier">T</span></code> is a function,
2659            function pointer, function reference, or member function pointer, the
2660            aliased type's return type is <code class="computeroutput"><span class="identifier">R</span></code>,
2661            but is otherwise identical to <code class="computeroutput"><span class="identifier">T</span></code>.
2662          </li>
2663<li class="listitem">
2664            When <code class="computeroutput"><span class="identifier">T</span></code> is a member data
2665            pointer of class <code class="computeroutput"><span class="identifier">foo</span></code>
2666            to a <code class="computeroutput"><span class="identifier">U</span></code> type (such that
2667            <code class="computeroutput"><span class="identifier">T</span></code> is <code class="computeroutput"><span class="identifier">U</span>
2668            <span class="identifier">foo</span><span class="special">::*</span></code>),
2669            the aliased type is <code class="computeroutput"><span class="identifier">R</span> <span class="identifier">foo</span><span class="special">::*</span></code>.
2670          </li>
2671</ul></div>
2672<h5>
2673<a name="callable_traits.reference.ref_apply_return.h4"></a>
2674        <span class="phrase"><a name="callable_traits.reference.ref_apply_return.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_apply_return.input_output_examples">Input/Output
2675        Examples</a>
2676      </h5>
2677<div class="informaltable"><table class="table">
2678<colgroup>
2679<col>
2680<col>
2681</colgroup>
2682<thead><tr>
2683<th>
2684                <p>
2685                  <code class="computeroutput"><span class="identifier">T</span></code>
2686                </p>
2687              </th>
2688<th>
2689                <p>
2690                  <code class="computeroutput"><span class="identifier">apply_return_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&gt;</span></code>
2691                </p>
2692              </th>
2693</tr></thead>
2694<tbody>
2695<tr>
2696<td>
2697                <p>
2698                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">&gt;</span></code>
2699                </p>
2700              </td>
2701<td>
2702                <p>
2703                  <code class="computeroutput"><span class="keyword">float</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">)</span></code>
2704                </p>
2705              </td>
2706</tr>
2707<tr>
2708<td>
2709                <p>
2710                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
2711                </p>
2712              </td>
2713<td>
2714                <p>
2715                  <code class="computeroutput"><span class="keyword">float</span><span class="special">()</span></code>
2716                </p>
2717              </td>
2718</tr>
2719<tr>
2720<td>
2721                <p>
2722                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(&amp;)()</span></code>
2723                </p>
2724              </td>
2725<td>
2726                <p>
2727                  <code class="computeroutput"><span class="keyword">float</span><span class="special">(&amp;)()</span></code>
2728                </p>
2729              </td>
2730</tr>
2731<tr>
2732<td>
2733                <p>
2734                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)()</span></code>
2735                </p>
2736              </td>
2737<td>
2738                <p>
2739                  <code class="computeroutput"><span class="keyword">float</span><span class="special">(*)()</span></code>
2740                </p>
2741              </td>
2742</tr>
2743<tr>
2744<td>
2745                <p>
2746                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)(...)</span></code>
2747                </p>
2748              </td>
2749<td>
2750                <p>
2751                  <code class="computeroutput"><span class="keyword">float</span><span class="special">(*)()</span></code>
2752                </p>
2753              </td>
2754</tr>
2755<tr>
2756<td>
2757                <p>
2758                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
2759                </p>
2760              </td>
2761<td>
2762                <p>
2763                  <code class="computeroutput"><span class="keyword">float</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
2764                </p>
2765              </td>
2766</tr>
2767<tr>
2768<td>
2769                <p>
2770                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
2771                  <span class="special">&amp;</span></code>
2772                </p>
2773              </td>
2774<td>
2775                <p>
2776                  <code class="computeroutput"><span class="keyword">float</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
2777                  <span class="special">&amp;</span></code>
2778                </p>
2779              </td>
2780</tr>
2781<tr>
2782<td>
2783                <p>
2784                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
2785                  <span class="special">&amp;&amp;</span></code>
2786                </p>
2787              </td>
2788<td>
2789                <p>
2790                  <code class="computeroutput"><span class="keyword">float</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
2791                  <span class="special">&amp;&amp;</span></code>
2792                </p>
2793              </td>
2794</tr>
2795<tr>
2796<td>
2797                <p>
2798                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
2799                  <span class="keyword">const</span></code>
2800                </p>
2801              </td>
2802<td>
2803                <p>
2804                  <code class="computeroutput"><span class="keyword">float</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
2805                  <span class="keyword">const</span></code>
2806                </p>
2807              </td>
2808</tr>
2809<tr>
2810<td>
2811                <p>
2812                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
2813                  <span class="identifier">transaction_safe</span></code>
2814                </p>
2815              </td>
2816<td>
2817                <p>
2818                  <code class="computeroutput"><span class="keyword">float</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
2819                  <span class="identifier">transaction_safe</span></code>
2820                </p>
2821              </td>
2822</tr>
2823<tr>
2824<td>
2825                <p>
2826                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
2827                </p>
2828              </td>
2829<td>
2830                <p>
2831                  <code class="computeroutput"><span class="keyword">float</span> <span class="identifier">foo</span><span class="special">::*</span></code>
2832                </p>
2833              </td>
2834</tr>
2835<tr>
2836<td>
2837                <p>
2838                  <code class="computeroutput"><span class="keyword">int</span></code>
2839                </p>
2840              </td>
2841<td>
2842                <p>
2843                  (substitution failure)
2844                </p>
2845              </td>
2846</tr>
2847<tr>
2848<td>
2849                <p>
2850                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*</span><span class="keyword">const</span><span class="special">)()</span></code>
2851                </p>
2852              </td>
2853<td>
2854                <p>
2855                  (substitution failure)
2856                </p>
2857              </td>
2858</tr>
2859</tbody>
2860</table></div>
2861<h5>
2862<a name="callable_traits.reference.ref_apply_return.h5"></a>
2863        <span class="phrase"><a name="callable_traits.reference.ref_apply_return.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_apply_return.example_program">Example
2864        Program</a>
2865      </h5>
2866<p>
2867        [apply_return]
2868      </p>
2869</div>
2870<div class="section">
2871<div class="titlepage"><div><div><h3 class="title">
2872<a name="callable_traits.reference.ref_args"></a><a class="link" href="reference.html#callable_traits.reference.ref_args" title="args">args</a>
2873</h3></div></div></div>
2874<h5>
2875<a name="callable_traits.reference.ref_args.h0"></a>
2876        <span class="phrase"><a name="callable_traits.reference.ref_args.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_args.header">Header</a>
2877      </h5>
2878<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">args</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
2879<h5>
2880<a name="callable_traits.reference.ref_args.h1"></a>
2881        <span class="phrase"><a name="callable_traits.reference.ref_args.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_args.definition">Definition</a>
2882      </h5>
2883<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span><span class="special">...&gt;</span> <span class="keyword">class</span> <span class="identifier">Container</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&gt;</span>
2884<span class="keyword">using</span> <span class="identifier">args_t</span> <span class="special">=</span> <span class="comment">//see below</span>
2885
2886<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span>
2887    <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span><span class="special">...&gt;</span> <span class="keyword">class</span> <span class="identifier">Container</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&gt;</span>
2888<span class="keyword">struct</span> <span class="identifier">args</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">args_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">Container</span><span class="special">&gt;</span> <span class="special">{};</span>
2889</pre>
2890<h5>
2891<a name="callable_traits.reference.ref_args.h2"></a>
2892        <span class="phrase"><a name="callable_traits.reference.ref_args.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_args.constraints">Constraints</a>
2893      </h5>
2894<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
2895            <code class="computeroutput"><span class="identifier">T</span></code> must be one of the
2896            following:
2897            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
2898<li class="listitem">
2899                  function
2900                </li>
2901<li class="listitem">
2902                  function pointer
2903                </li>
2904<li class="listitem">
2905                  function reference
2906                </li>
2907<li class="listitem">
2908                  member function pointer
2909                </li>
2910<li class="listitem">
2911                  member data pointer
2912                </li>
2913<li class="listitem">
2914                  user-defined type with a non-overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>
2915                </li>
2916<li class="listitem">
2917                  type of a non-generic lambda
2918                </li>
2919</ul></div>
2920          </li></ul></div>
2921<h5>
2922<a name="callable_traits.reference.ref_args.h3"></a>
2923        <span class="phrase"><a name="callable_traits.reference.ref_args.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_args.behavior">Behavior</a>
2924      </h5>
2925<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2926<li class="listitem">
2927            When the constraints are violated, a substitution failure occurs.
2928          </li>
2929<li class="listitem">
2930            When <code class="computeroutput"><span class="identifier">T</span></code> is a function,
2931            function pointer, or function reference, the aliased type is <code class="computeroutput"><span class="identifier">Container</span></code> instantiated with the function's
2932            parameter types.
2933          </li>
2934<li class="listitem">
2935            When <code class="computeroutput"><span class="identifier">T</span></code> is a function
2936            object, the aliased type is <code class="computeroutput"><span class="identifier">Container</span></code>
2937            instantiated with the <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="keyword">operator</span><span class="special">()</span></code> parameter types.
2938          </li>
2939<li class="listitem">
2940            When <code class="computeroutput"><span class="identifier">T</span></code> is a member function
2941            pointer, the aliased type is a <code class="computeroutput"><span class="identifier">Container</span></code>
2942            instantiation, where the first type argument is a reference to the parent
2943            class of <code class="computeroutput"><span class="identifier">T</span></code>, qualified
2944            according to the member qualifiers on <code class="computeroutput"><span class="identifier">T</span></code>,
2945            such that the first type is equivalent to <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">::</span><span class="identifier">qualified_class_of_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>. The subsequent type arguments, if
2946            any, are the parameter types of the member function.
2947          </li>
2948<li class="listitem">
2949            When <code class="computeroutput"><span class="identifier">T</span></code> is a member data
2950            pointer, the aliased type is <code class="computeroutput"><span class="identifier">Container</span></code>
2951            with a single element, which is a <code class="computeroutput"><span class="keyword">const</span></code>
2952            reference to the parent class of <code class="computeroutput"><span class="identifier">T</span></code>.
2953          </li>
2954</ul></div>
2955<h5>
2956<a name="callable_traits.reference.ref_args.h4"></a>
2957        <span class="phrase"><a name="callable_traits.reference.ref_args.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_args.input_output_examples">Input/Output
2958        Examples</a>
2959      </h5>
2960<div class="informaltable"><table class="table">
2961<colgroup>
2962<col>
2963<col>
2964</colgroup>
2965<thead><tr>
2966<th>
2967                <p>
2968                  <code class="computeroutput"><span class="identifier">T</span></code>
2969                </p>
2970              </th>
2971<th>
2972                <p>
2973                  <code class="computeroutput"><span class="identifier">args_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
2974                </p>
2975              </th>
2976</tr></thead>
2977<tbody>
2978<tr>
2979<td>
2980                <p>
2981                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="keyword">float</span><span class="special">,</span>
2982                  <span class="keyword">char</span><span class="special">,</span>
2983                  <span class="keyword">int</span><span class="special">)</span></code>
2984                </p>
2985              </td>
2986<td>
2987                <p>
2988                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">,</span>
2989                  <span class="keyword">char</span><span class="special">,</span>
2990                  <span class="keyword">int</span><span class="special">&gt;</span></code>
2991                </p>
2992              </td>
2993</tr>
2994<tr>
2995<td>
2996                <p>
2997                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(*)(</span><span class="keyword">float</span><span class="special">,</span>
2998                  <span class="keyword">char</span><span class="special">,</span>
2999                  <span class="keyword">int</span><span class="special">)</span></code>
3000                </p>
3001              </td>
3002<td>
3003                <p>
3004                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">,</span>
3005                  <span class="keyword">char</span><span class="special">,</span>
3006                  <span class="keyword">int</span></code>
3007                </p>
3008              </td>
3009</tr>
3010<tr>
3011<td>
3012                <p>
3013                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(&amp;)(</span><span class="keyword">float</span><span class="special">,</span>
3014                  <span class="keyword">char</span><span class="special">,</span>
3015                  <span class="keyword">int</span><span class="special">)</span></code>
3016                </p>
3017              </td>
3018<td>
3019                <p>
3020                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">,</span>
3021                  <span class="keyword">char</span><span class="special">,</span>
3022                  <span class="keyword">int</span></code>
3023                </p>
3024              </td>
3025</tr>
3026<tr>
3027<td>
3028                <p>
3029                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="keyword">float</span><span class="special">,</span>
3030                  <span class="keyword">char</span><span class="special">,</span>
3031                  <span class="keyword">int</span><span class="special">)</span>
3032                  <span class="keyword">const</span> <span class="special">&amp;&amp;</span></code>
3033                </p>
3034              </td>
3035<td>
3036                <p>
3037                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">,</span>
3038                  <span class="keyword">char</span><span class="special">,</span>
3039                  <span class="keyword">int</span><span class="special">&gt;</span></code>
3040                </p>
3041              </td>
3042</tr>
3043<tr>
3044<td>
3045                <p>
3046                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(*)()</span></code>
3047                </p>
3048              </td>
3049<td>
3050                <p>
3051                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;&gt;</span></code>
3052                </p>
3053              </td>
3054</tr>
3055<tr>
3056<td>
3057                <p>
3058                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
3059                  <span class="keyword">const</span> <span class="special">&amp;)(</span><span class="keyword">float</span><span class="special">,</span>
3060                  <span class="keyword">char</span><span class="special">,</span>
3061                  <span class="keyword">int</span><span class="special">)</span></code>
3062                </p>
3063              </td>
3064<td>
3065                <p>
3066                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="identifier">foo</span><span class="special">&amp;,</span>
3067                  <span class="keyword">float</span><span class="special">,</span>
3068                  <span class="keyword">char</span><span class="special">,</span>
3069                  <span class="keyword">int</span><span class="special">&gt;</span></code>
3070                </p>
3071              </td>
3072</tr>
3073<tr>
3074<td>
3075                <p>
3076                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(</span><span class="keyword">int</span><span class="special">)</span> <span class="keyword">const</span></code>
3077                </p>
3078              </td>
3079<td>
3080                <p>
3081                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="identifier">foo</span><span class="special">&amp;,</span> <span class="keyword">int</span><span class="special">&gt;</span></code>
3082                </p>
3083              </td>
3084</tr>
3085<tr>
3086<td>
3087                <p>
3088                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
3089                  <span class="keyword">volatile</span> <span class="special">&amp;&amp;</span></code>
3090                </p>
3091              </td>
3092<td>
3093                <p>
3094                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">volatile</span> <span class="identifier">foo</span>
3095                  <span class="special">&amp;&amp;&gt;</span></code>
3096                </p>
3097              </td>
3098</tr>
3099<tr>
3100<td>
3101                <p>
3102                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
3103                </p>
3104              </td>
3105<td>
3106                <p>
3107                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="identifier">foo</span><span class="special">&amp;&gt;</span></code>
3108                </p>
3109              </td>
3110</tr>
3111<tr>
3112<td>
3113                <p>
3114                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">int</span>
3115                  <span class="identifier">foo</span><span class="special">::*</span></code>
3116                </p>
3117              </td>
3118<td>
3119                <p>
3120                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="identifier">foo</span><span class="special">&amp;&gt;</span></code>
3121                </p>
3122              </td>
3123</tr>
3124<tr>
3125<td>
3126                <p>
3127                  <code class="computeroutput"><span class="keyword">int</span></code>
3128                </p>
3129              </td>
3130<td>
3131                <p>
3132                  (substitution failure)
3133                </p>
3134              </td>
3135</tr>
3136<tr>
3137<td>
3138                <p>
3139                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*</span><span class="keyword">const</span><span class="special">)()</span></code>
3140                </p>
3141              </td>
3142<td>
3143                <p>
3144                  (substitution failure)
3145                </p>
3146              </td>
3147</tr>
3148</tbody>
3149</table></div>
3150<h5>
3151<a name="callable_traits.reference.ref_args.h5"></a>
3152        <span class="phrase"><a name="callable_traits.reference.ref_args.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_args.example_program">Example
3153        Program</a>
3154      </h5>
3155<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
3156<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">memory</span><span class="special">&gt;</span>
3157<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3158
3159<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
3160
3161<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Expect</span><span class="special">&gt;</span>
3162<span class="keyword">void</span> <span class="identifier">test</span><span class="special">(){</span>
3163    <span class="keyword">using</span> <span class="identifier">args_t</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">args_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;;</span>
3164    <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">args_t</span><span class="special">,</span> <span class="identifier">Expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
3165<span class="special">}</span>
3166
3167<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
3168
3169    <span class="special">{</span>
3170        <span class="keyword">auto</span> <span class="identifier">lamda</span> <span class="special">=</span> <span class="special">[](</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*){};</span>
3171        <span class="keyword">using</span> <span class="identifier">lam</span> <span class="special">=</span> <span class="keyword">decltype</span><span class="special">(</span><span class="identifier">lamda</span><span class="special">);</span>
3172        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*&gt;;</span>
3173
3174        <span class="identifier">test</span><span class="special">&lt;</span><span class="identifier">lam</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;();</span>
3175    <span class="special">}</span>
3176
3177    <span class="special">{</span>
3178        <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">;</span>
3179        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*);</span>
3180        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="identifier">foo</span><span class="special">&amp;,</span> <span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*&gt;;</span>
3181
3182        <span class="identifier">test</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;();</span>
3183    <span class="special">}</span>
3184
3185    <span class="special">{</span>
3186        <span class="keyword">using</span> <span class="identifier">function_ptr</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(*)(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*);</span>
3187        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*&gt;;</span>
3188        <span class="identifier">test</span><span class="special">&lt;</span><span class="identifier">function_ptr</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;();</span>
3189    <span class="special">}</span>
3190
3191    <span class="special">{</span>
3192        <span class="keyword">using</span> <span class="identifier">function_ref</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(&amp;)(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*);</span>
3193        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*&gt;;</span>
3194        <span class="identifier">test</span><span class="special">&lt;</span><span class="identifier">function_ref</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;();</span>
3195    <span class="special">}</span>
3196
3197    <span class="special">{</span>
3198        <span class="keyword">using</span> <span class="identifier">function</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*);</span>
3199        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*&gt;;</span>
3200        <span class="identifier">test</span><span class="special">&lt;</span><span class="identifier">function</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;();</span>
3201    <span class="special">}</span>
3202
3203    <span class="special">{</span>
3204        <span class="keyword">using</span> <span class="identifier">abominable</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*)</span> <span class="keyword">const</span><span class="special">;</span>
3205        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*&gt;;</span>
3206        <span class="identifier">test</span><span class="special">&lt;</span><span class="identifier">abominable</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;();</span>
3207    <span class="special">}</span>
3208<span class="special">}</span>
3209</pre>
3210</div>
3211<div class="section">
3212<div class="titlepage"><div><div><h3 class="title">
3213<a name="callable_traits.reference.ref_class_of"></a><a class="link" href="reference.html#callable_traits.reference.ref_class_of" title="class_of">class_of</a>
3214</h3></div></div></div>
3215<h5>
3216<a name="callable_traits.reference.ref_class_of.h0"></a>
3217        <span class="phrase"><a name="callable_traits.reference.ref_class_of.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_class_of.header">Header</a>
3218      </h5>
3219<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">class_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
3220<h5>
3221<a name="callable_traits.reference.ref_class_of.h1"></a>
3222        <span class="phrase"><a name="callable_traits.reference.ref_class_of.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_class_of.definition">Definition</a>
3223      </h5>
3224<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
3225<span class="keyword">using</span> <span class="identifier">class_of_t</span> <span class="special">=</span> <span class="comment">//see below</span>
3226
3227<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
3228<span class="keyword">struct</span> <span class="identifier">class_of</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">class_of_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
3229</pre>
3230<h5>
3231<a name="callable_traits.reference.ref_class_of.h2"></a>
3232        <span class="phrase"><a name="callable_traits.reference.ref_class_of.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_class_of.constraints">Constraints</a>
3233      </h5>
3234<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
3235            <code class="computeroutput"><span class="identifier">T</span></code> must be a member pointer
3236          </li></ul></div>
3237<h5>
3238<a name="callable_traits.reference.ref_class_of.h3"></a>
3239        <span class="phrase"><a name="callable_traits.reference.ref_class_of.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_class_of.behavior">Behavior</a>
3240      </h5>
3241<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3242<li class="listitem">
3243            A substitution failure occurs if the constraints are violated.
3244          </li>
3245<li class="listitem">
3246            The aliased type is the parent class of the member. In other words, if
3247            <code class="computeroutput"><span class="identifier">T</span></code> is expanded to <code class="computeroutput"><span class="identifier">U</span> <span class="identifier">C</span><span class="special">::*</span></code>, the aliased type is <code class="computeroutput"><span class="identifier">C</span></code>.
3248          </li>
3249</ul></div>
3250<h5>
3251<a name="callable_traits.reference.ref_class_of.h4"></a>
3252        <span class="phrase"><a name="callable_traits.reference.ref_class_of.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_class_of.input_output_examples">Input/Output
3253        Examples</a>
3254      </h5>
3255<div class="informaltable"><table class="table">
3256<colgroup>
3257<col>
3258<col>
3259</colgroup>
3260<thead><tr>
3261<th>
3262                <p>
3263                  <code class="computeroutput"><span class="identifier">T</span></code>
3264                </p>
3265              </th>
3266<th>
3267                <p>
3268                  <code class="computeroutput"><span class="identifier">class_of_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
3269                </p>
3270              </th>
3271</tr></thead>
3272<tbody>
3273<tr>
3274<td>
3275                <p>
3276                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
3277                </p>
3278              </td>
3279<td>
3280                <p>
3281                  <code class="computeroutput"><span class="identifier">foo</span></code>
3282                </p>
3283              </td>
3284</tr>
3285<tr>
3286<td>
3287                <p>
3288                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
3289                  <span class="keyword">const</span> <span class="special">&amp;)()</span>
3290                  <span class="keyword">const</span></code>
3291                </p>
3292              </td>
3293<td>
3294                <p>
3295                  <code class="computeroutput"><span class="identifier">foo</span></code>
3296                </p>
3297              </td>
3298</tr>
3299</tbody>
3300</table></div>
3301<h5>
3302<a name="callable_traits.reference.ref_class_of.h5"></a>
3303        <span class="phrase"><a name="callable_traits.reference.ref_class_of.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_class_of.example_program">Example
3304        Program</a>
3305      </h5>
3306<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
3307<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">class_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3308
3309<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
3310
3311<span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">;</span>
3312
3313<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">foo</span><span class="special">,</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">class_of_t</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&gt;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
3314<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">foo</span><span class="special">,</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">class_of_t</span><span class="special">&lt;</span><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*&gt;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
3315
3316<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
3317</pre>
3318</div>
3319<div class="section">
3320<div class="titlepage"><div><div><h3 class="title">
3321<a name="callable_traits.reference.ref_function_type"></a><a class="link" href="reference.html#callable_traits.reference.ref_function_type" title="function_type">function_type</a>
3322</h3></div></div></div>
3323<h5>
3324<a name="callable_traits.reference.ref_function_type.h0"></a>
3325        <span class="phrase"><a name="callable_traits.reference.ref_function_type.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_function_type.header">Header</a>
3326      </h5>
3327<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">function_type</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
3328<h5>
3329<a name="callable_traits.reference.ref_function_type.h1"></a>
3330        <span class="phrase"><a name="callable_traits.reference.ref_function_type.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_function_type.definition">Definition</a>
3331      </h5>
3332<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
3333<span class="keyword">using</span> <span class="identifier">function_type_t</span> <span class="special">=</span> <span class="comment">//see below</span>
3334
3335<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
3336<span class="keyword">struct</span> <span class="identifier">function_type</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">function_type_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
3337</pre>
3338<h5>
3339<a name="callable_traits.reference.ref_function_type.h2"></a>
3340        <span class="phrase"><a name="callable_traits.reference.ref_function_type.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_function_type.constraints">Constraints</a>
3341      </h5>
3342<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
3343            <code class="computeroutput"><span class="identifier">T</span></code> must be one of the
3344            following:
3345            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
3346<li class="listitem">
3347                  function
3348                </li>
3349<li class="listitem">
3350                  function pointer
3351                </li>
3352<li class="listitem">
3353                  function reference
3354                </li>
3355<li class="listitem">
3356                  member function pointer
3357                </li>
3358<li class="listitem">
3359                  member data pointer
3360                </li>
3361<li class="listitem">
3362                  user-defined type with a non-overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>
3363                </li>
3364<li class="listitem">
3365                  type of a non-generic lambda
3366                </li>
3367</ul></div>
3368          </li></ul></div>
3369<h5>
3370<a name="callable_traits.reference.ref_function_type.h3"></a>
3371        <span class="phrase"><a name="callable_traits.reference.ref_function_type.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_function_type.behavior">Behavior</a>
3372      </h5>
3373<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3374<li class="listitem">
3375            When the constraints are violated, a substitution failure occurs.
3376          </li>
3377<li class="listitem">
3378            When <code class="computeroutput"><span class="identifier">T</span></code> is a function,
3379            the aliased type is identical to <code class="computeroutput"><span class="identifier">T</span></code>,
3380            except that the aliased function type will not have member qualifiers
3381            or the <code class="computeroutput"><span class="identifier">transaction_safe</span></code>
3382            specifier.
3383          </li>
3384<li class="listitem">
3385            When <code class="computeroutput"><span class="identifier">T</span></code> is a function
3386            pointer, the aliased type is equivalent to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">remove_pointer_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>.
3387          </li>
3388<li class="listitem">
3389            When <code class="computeroutput"><span class="identifier">T</span></code> is a function
3390            reference, the aliased type is equivalent to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">remove_reference_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>.
3391          </li>
3392<li class="listitem">
3393            When <code class="computeroutput"><span class="identifier">T</span></code> is a function
3394            object, the aliased type is a function type with the same return type
3395            and parameter list as <code class="computeroutput"><span class="identifier">T</span></code>'s
3396            <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>.
3397          </li>
3398<li class="listitem">
3399            When <code class="computeroutput"><span class="identifier">T</span></code> is a member function
3400            pointer, the aliased type is a function type with the same return type
3401            as <code class="computeroutput"><span class="identifier">T</span></code>, and the first parameter
3402            is a reference to the parent class of <code class="computeroutput"><span class="identifier">T</span></code>,
3403            qualified according to the member qualifiers on <code class="computeroutput"><span class="identifier">T</span></code>.
3404            The subsequent parameters, if any, are the parameter types of <code class="computeroutput"><span class="identifier">T</span></code>.
3405          </li>
3406<li class="listitem">
3407            When <code class="computeroutput"><span class="identifier">T</span></code> is a member data
3408            pointer, the aliased type is a function type returning the underlying
3409            member type of <code class="computeroutput"><span class="identifier">T</span></code>, taking
3410            a single parameter, which is a <code class="computeroutput"><span class="keyword">const</span></code>
3411            reference to the parent type of <code class="computeroutput"><span class="identifier">T</span></code>.
3412          </li>
3413<li class="listitem">
3414            In all cases, the aliased function type will not have member qualifiers,
3415            and will not have the <code class="computeroutput"><span class="identifier">transaction_safe</span></code>
3416            specifier.
3417          </li>
3418</ul></div>
3419<h5>
3420<a name="callable_traits.reference.ref_function_type.h4"></a>
3421        <span class="phrase"><a name="callable_traits.reference.ref_function_type.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_function_type.input_output_examples">Input/Output
3422        Examples</a>
3423      </h5>
3424<div class="informaltable"><table class="table">
3425<colgroup>
3426<col>
3427<col>
3428</colgroup>
3429<thead><tr>
3430<th>
3431                <p>
3432                  <code class="computeroutput"><span class="identifier">T</span></code>
3433                </p>
3434              </th>
3435<th>
3436                <p>
3437                  <code class="computeroutput"><span class="identifier">function_type_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
3438                </p>
3439              </th>
3440</tr></thead>
3441<tbody>
3442<tr>
3443<td>
3444                <p>
3445                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span></code>
3446                </p>
3447              </td>
3448<td>
3449                <p>
3450                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span></code>
3451                </p>
3452              </td>
3453</tr>
3454<tr>
3455<td>
3456                <p>
3457                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span> <span class="keyword">const</span></code>
3458                </p>
3459              </td>
3460<td>
3461                <p>
3462                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span></code>
3463                </p>
3464              </td>
3465</tr>
3466<tr>
3467<td>
3468                <p>
3469                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span> <span class="identifier">transaction_safe</span></code>
3470                </p>
3471              </td>
3472<td>
3473                <p>
3474                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span></code>
3475                </p>
3476              </td>
3477</tr>
3478<tr>
3479<td>
3480                <p>
3481                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(*</span><span class="keyword">const</span> <span class="special">&amp;)(</span><span class="keyword">int</span><span class="special">)</span></code>
3482                </p>
3483              </td>
3484<td>
3485                <p>
3486                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span></code>
3487                </p>
3488              </td>
3489</tr>
3490<tr>
3491<td>
3492                <p>
3493                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(&amp;)(</span><span class="keyword">int</span><span class="special">)</span></code>
3494                </p>
3495              </td>
3496<td>
3497                <p>
3498                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span></code>
3499                </p>
3500              </td>
3501</tr>
3502<tr>
3503<td>
3504                <p>
3505                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(*</span>
3506                  <span class="keyword">volatile</span><span class="special">)()</span></code>
3507                </p>
3508              </td>
3509<td>
3510                <p>
3511                  <code class="computeroutput"><span class="keyword">void</span><span class="special">()</span></code>
3512                </p>
3513              </td>
3514</tr>
3515<tr>
3516<td>
3517                <p>
3518                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(</span><span class="keyword">int</span><span class="special">)</span></code>
3519                </p>
3520              </td>
3521<td>
3522                <p>
3523                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">&amp;,</span>
3524                  <span class="keyword">int</span><span class="special">)</span></code>
3525                </p>
3526              </td>
3527</tr>
3528<tr>
3529<td>
3530                <p>
3531                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(</span><span class="keyword">int</span><span class="special">)</span> <span class="keyword">const</span></code>
3532                </p>
3533              </td>
3534<td>
3535                <p>
3536                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">foo</span><span class="special">&amp;,</span> <span class="keyword">int</span><span class="special">)</span></code>
3537                </p>
3538              </td>
3539</tr>
3540<tr>
3541<td>
3542                <p>
3543                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
3544                  <span class="keyword">volatile</span> <span class="special">&amp;&amp;</span></code>
3545                </p>
3546              </td>
3547<td>
3548                <p>
3549                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="keyword">volatile</span> <span class="identifier">foo</span><span class="special">&amp;&amp;)</span></code>
3550                </p>
3551              </td>
3552</tr>
3553<tr>
3554<td>
3555                <p>
3556                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
3557                </p>
3558              </td>
3559<td>
3560                <p>
3561                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">foo</span><span class="special">&amp;)</span></code>
3562                </p>
3563              </td>
3564</tr>
3565<tr>
3566<td>
3567                <p>
3568                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">int</span>
3569                  <span class="identifier">foo</span><span class="special">::*</span></code>
3570                </p>
3571              </td>
3572<td>
3573                <p>
3574                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">foo</span><span class="special">&amp;)</span></code>
3575                </p>
3576              </td>
3577</tr>
3578<tr>
3579<td>
3580                <p>
3581                  <code class="computeroutput"><span class="keyword">int</span></code>
3582                </p>
3583              </td>
3584<td>
3585                <p>
3586                  (substitution failure)
3587                </p>
3588              </td>
3589</tr>
3590</tbody>
3591</table></div>
3592<h5>
3593<a name="callable_traits.reference.ref_function_type.h5"></a>
3594        <span class="phrase"><a name="callable_traits.reference.ref_function_type.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_function_type.example_program">Example
3595        Program</a>
3596      </h5>
3597<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
3598<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3599
3600<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
3601
3602<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
3603<span class="keyword">void</span> <span class="identifier">test</span><span class="special">(){</span>
3604
3605    <span class="comment">// this example shows how boost::callable_traits::function_type_t</span>
3606    <span class="comment">// bevaves consistently for many different types</span>
3607    <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">function_type_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;;</span>
3608    <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*);</span>
3609    <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">expect</span><span class="special">,</span> <span class="identifier">type</span><span class="special">&gt;{},</span> <span class="string">""</span><span class="special">);</span>
3610<span class="special">}</span>
3611
3612<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
3613
3614    <span class="keyword">auto</span> <span class="identifier">lamda</span> <span class="special">=</span> <span class="special">[](</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*){};</span>
3615    <span class="keyword">using</span> <span class="identifier">lam</span> <span class="special">=</span> <span class="keyword">decltype</span><span class="special">(</span><span class="identifier">lamda</span><span class="special">);</span>
3616    <span class="identifier">test</span><span class="special">&lt;</span><span class="identifier">lam</span><span class="special">&gt;();</span>
3617
3618    <span class="keyword">using</span> <span class="identifier">function_ptr</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(*)(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*);</span>
3619    <span class="identifier">test</span><span class="special">&lt;</span><span class="identifier">function_ptr</span><span class="special">&gt;();</span>
3620
3621    <span class="keyword">using</span> <span class="identifier">function_ref</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(&amp;)(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*);</span>
3622    <span class="identifier">test</span><span class="special">&lt;</span><span class="identifier">function_ref</span><span class="special">&gt;();</span>
3623
3624    <span class="keyword">using</span> <span class="identifier">function</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*);</span>
3625    <span class="identifier">test</span><span class="special">&lt;</span><span class="identifier">function</span><span class="special">&gt;();</span>
3626
3627    <span class="keyword">using</span> <span class="identifier">abominable</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*)</span> <span class="keyword">const</span><span class="special">;</span>
3628    <span class="identifier">test</span><span class="special">&lt;</span><span class="identifier">abominable</span><span class="special">&gt;();</span>
3629<span class="special">}</span>
3630</pre>
3631</div>
3632<div class="section">
3633<div class="titlepage"><div><div><h3 class="title">
3634<a name="callable_traits.reference.ref_has_member_qualifiers"></a><a class="link" href="reference.html#callable_traits.reference.ref_has_member_qualifiers" title="has_member_qualifiers">has_member_qualifiers</a>
3635</h3></div></div></div>
3636<h5>
3637<a name="callable_traits.reference.ref_has_member_qualifiers.h0"></a>
3638        <span class="phrase"><a name="callable_traits.reference.ref_has_member_qualifiers.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_member_qualifiers.header">Header</a>
3639      </h5>
3640<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">has_member_qualifiers</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
3641<h5>
3642<a name="callable_traits.reference.ref_has_member_qualifiers.h1"></a>
3643        <span class="phrase"><a name="callable_traits.reference.ref_has_member_qualifiers.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_member_qualifiers.definition">Definition</a>
3644      </h5>
3645<pre class="programlisting"><span class="comment">// inherits from either std::true_type or std::false_type</span>
3646<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
3647<span class="keyword">struct</span> <span class="identifier">has_member_qualifiers</span><span class="special">;</span>
3648
3649<span class="comment">// only available when variable templates are supported</span>
3650<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
3651<span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="identifier">has_member_qualifiers_v</span> <span class="special">=</span> <span class="comment">//see below</span>
3652</pre>
3653<h5>
3654<a name="callable_traits.reference.ref_has_member_qualifiers.h2"></a>
3655        <span class="phrase"><a name="callable_traits.reference.ref_has_member_qualifiers.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_member_qualifiers.constraints">Constraints</a>
3656      </h5>
3657<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
3658            none
3659          </li></ul></div>
3660<h5>
3661<a name="callable_traits.reference.ref_has_member_qualifiers.h3"></a>
3662        <span class="phrase"><a name="callable_traits.reference.ref_has_member_qualifiers.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_member_qualifiers.behavior">Behavior</a>
3663      </h5>
3664<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3665<li class="listitem">
3666            <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">false_type</span></code> is inherited by <code class="computeroutput"><span class="identifier">has_member_qualifiers</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
3667            and is aliased by <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">has_member_qualifiers</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span></code>, except when one of the following
3668            criteria is met, in which case <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">true_type</span></code>
3669            would be similarly inherited and aliased:
3670            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
3671<li class="listitem">
3672                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
3673                  with member qualifiers
3674                </li>
3675<li class="listitem">
3676                  <code class="computeroutput"><span class="identifier">T</span></code> is a member function
3677                  pointer with member qualifiers
3678                </li>
3679<li class="listitem">
3680                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
3681                  object with a member-qualified <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>
3682                </li>
3683</ul></div>
3684          </li>
3685<li class="listitem">
3686            On compilers that support variable templates, <code class="computeroutput"><span class="identifier">has_member_qualifiers_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> is equivalent to <code class="computeroutput"><span class="identifier">has_member_qualifiers</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code>.
3687          </li>
3688</ul></div>
3689<h5>
3690<a name="callable_traits.reference.ref_has_member_qualifiers.h4"></a>
3691        <span class="phrase"><a name="callable_traits.reference.ref_has_member_qualifiers.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_member_qualifiers.input_output_examples">Input/Output
3692        Examples</a>
3693      </h5>
3694<div class="informaltable"><table class="table">
3695<colgroup>
3696<col>
3697<col>
3698</colgroup>
3699<thead><tr>
3700<th>
3701                <p>
3702                  <code class="computeroutput"><span class="identifier">T</span></code>
3703                </p>
3704              </th>
3705<th>
3706                <p>
3707                  <code class="computeroutput"><span class="identifier">has_member_qualifiers_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
3708                </p>
3709              </th>
3710</tr></thead>
3711<tbody>
3712<tr>
3713<td>
3714                <p>
3715                  <code class="computeroutput"><span class="keyword">void</span><span class="special">()</span>
3716                  <span class="keyword">const</span></code>
3717                </p>
3718              </td>
3719<td>
3720                <p>
3721                  <code class="computeroutput"><span class="keyword">true</span></code>
3722                </p>
3723              </td>
3724</tr>
3725<tr>
3726<td>
3727                <p>
3728                  <code class="computeroutput"><span class="keyword">void</span><span class="special">()</span>
3729                  <span class="keyword">const</span> <span class="identifier">transaction_safe</span></code>
3730                </p>
3731              </td>
3732<td>
3733                <p>
3734                  <code class="computeroutput"><span class="keyword">true</span></code>
3735                </p>
3736              </td>
3737</tr>
3738<tr>
3739<td>
3740                <p>
3741                  <code class="computeroutput"><span class="keyword">void</span><span class="special">()</span>
3742                  <span class="keyword">volatile</span> <span class="special">&amp;&amp;</span></code>
3743                </p>
3744              </td>
3745<td>
3746                <p>
3747                  <code class="computeroutput"><span class="keyword">true</span></code>
3748                </p>
3749              </td>
3750</tr>
3751<tr>
3752<td>
3753                <p>
3754                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
3755                  <span class="special">&amp;</span></code>
3756                </p>
3757              </td>
3758<td>
3759                <p>
3760                  <code class="computeroutput"><span class="keyword">true</span></code>
3761                </p>
3762              </td>
3763</tr>
3764<tr>
3765<td>
3766                <p>
3767                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
3768                  <span class="keyword">const</span></code>
3769                </p>
3770              </td>
3771<td>
3772                <p>
3773                  <code class="computeroutput"><span class="keyword">true</span></code>
3774                </p>
3775              </td>
3776</tr>
3777<tr>
3778<td>
3779                <p>
3780                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*&amp;)()</span>
3781                  <span class="keyword">const</span></code>
3782                </p>
3783              </td>
3784<td>
3785                <p>
3786                  <code class="computeroutput"><span class="keyword">true</span></code>
3787                </p>
3788              </td>
3789</tr>
3790<tr>
3791<td>
3792                <p>
3793                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
3794                  <span class="keyword">const</span><span class="special">)()</span>
3795                  <span class="keyword">const</span></code>
3796                </p>
3797              </td>
3798<td>
3799                <p>
3800                  <code class="computeroutput"><span class="keyword">true</span></code>
3801                </p>
3802              </td>
3803</tr>
3804<tr>
3805<td>
3806                <p>
3807                  <code class="computeroutput"><span class="keyword">void</span><span class="special">()</span></code>
3808                </p>
3809              </td>
3810<td>
3811                <p>
3812                  <code class="computeroutput"><span class="keyword">false</span></code>
3813                </p>
3814              </td>
3815</tr>
3816<tr>
3817<td>
3818                <p>
3819                  <code class="computeroutput"><span class="keyword">void</span><span class="special">()</span>
3820                  <span class="identifier">transaction_safe</span></code>
3821                </p>
3822              </td>
3823<td>
3824                <p>
3825                  <code class="computeroutput"><span class="keyword">false</span></code>
3826                </p>
3827              </td>
3828</tr>
3829<tr>
3830<td>
3831                <p>
3832                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(*)()</span></code>
3833                </p>
3834              </td>
3835<td>
3836                <p>
3837                  <code class="computeroutput"><span class="keyword">false</span></code>
3838                </p>
3839              </td>
3840</tr>
3841<tr>
3842<td>
3843                <p>
3844                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(*&amp;)()</span></code>
3845                </p>
3846              </td>
3847<td>
3848                <p>
3849                  <code class="computeroutput"><span class="keyword">false</span></code>
3850                </p>
3851              </td>
3852</tr>
3853<tr>
3854<td>
3855                <p>
3856                  <code class="computeroutput"><span class="keyword">int</span></code>
3857                </p>
3858              </td>
3859<td>
3860                <p>
3861                  <code class="computeroutput"><span class="keyword">false</span></code>
3862                </p>
3863              </td>
3864</tr>
3865<tr>
3866<td>
3867                <p>
3868                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">int</span></code>
3869                </p>
3870              </td>
3871<td>
3872                <p>
3873                  <code class="computeroutput"><span class="keyword">false</span></code>
3874                </p>
3875              </td>
3876</tr>
3877<tr>
3878<td>
3879                <p>
3880                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
3881                </p>
3882              </td>
3883<td>
3884                <p>
3885                  <code class="computeroutput"><span class="keyword">false</span></code>
3886                </p>
3887              </td>
3888</tr>
3889<tr>
3890<td>
3891                <p>
3892                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">int</span>
3893                  <span class="identifier">foo</span><span class="special">::*</span></code>
3894                </p>
3895              </td>
3896<td>
3897                <p>
3898                  <code class="computeroutput"><span class="keyword">false</span></code>
3899                </p>
3900              </td>
3901</tr>
3902</tbody>
3903</table></div>
3904<h5>
3905<a name="callable_traits.reference.ref_has_member_qualifiers.h5"></a>
3906        <span class="phrase"><a name="callable_traits.reference.ref_has_member_qualifiers.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_member_qualifiers.example_program">Example
3907        Program</a>
3908      </h5>
3909<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
3910<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">has_member_qualifiers</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3911
3912<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
3913
3914<span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">;</span>
3915
3916<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">has_member_qualifiers</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
3917<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">has_member_qualifiers</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">volatile</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
3918<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">has_member_qualifiers</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
3919
3920<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
3921</pre>
3922</div>
3923<div class="section">
3924<div class="titlepage"><div><div><h3 class="title">
3925<a name="callable_traits.reference.ref_has_varargs"></a><a class="link" href="reference.html#callable_traits.reference.ref_has_varargs" title="has_varargs">has_varargs</a>
3926</h3></div></div></div>
3927<h5>
3928<a name="callable_traits.reference.ref_has_varargs.h0"></a>
3929        <span class="phrase"><a name="callable_traits.reference.ref_has_varargs.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_varargs.header">Header</a>
3930      </h5>
3931<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">has_varargs</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
3932<h5>
3933<a name="callable_traits.reference.ref_has_varargs.h1"></a>
3934        <span class="phrase"><a name="callable_traits.reference.ref_has_varargs.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_varargs.definition">Definition</a>
3935      </h5>
3936<pre class="programlisting"><span class="comment">// inherits from either std::true_type or std::false_type</span>
3937<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
3938<span class="keyword">struct</span> <span class="identifier">has_varargs</span><span class="special">;</span>
3939
3940<span class="comment">// only available when variable templates are supported</span>
3941<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
3942<span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="identifier">has_varargs_v</span> <span class="special">=</span> <span class="comment">//see below</span>
3943</pre>
3944<h5>
3945<a name="callable_traits.reference.ref_has_varargs.h2"></a>
3946        <span class="phrase"><a name="callable_traits.reference.ref_has_varargs.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_varargs.constraints">Constraints</a>
3947      </h5>
3948<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
3949            none
3950          </li></ul></div>
3951<h5>
3952<a name="callable_traits.reference.ref_has_varargs.h3"></a>
3953        <span class="phrase"><a name="callable_traits.reference.ref_has_varargs.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_varargs.behavior">Behavior</a>
3954      </h5>
3955<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3956<li class="listitem">
3957            <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">false_type</span></code> is inherited by <code class="computeroutput"><span class="identifier">has_varargs</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
3958            and is aliased by <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">has_varargs</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span></code>, except when one of the following
3959            criteria is met, in which case <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">true_type</span></code>
3960            would be similarly inherited and aliased:
3961            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
3962<li class="listitem">
3963                  <code class="computeroutput"><span class="identifier">T</span></code> is a function,
3964                  function pointer, or function reference where the function's parameter
3965                  list includes C-style variadics.
3966                </li>
3967<li class="listitem">
3968                  <code class="computeroutput"><span class="identifier">T</span></code> is a pointer
3969                  to a member function with C-style variadics in the parameter list.
3970                </li>
3971<li class="listitem">
3972                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
3973                  object with a non-overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>, which has C-style variadics
3974                  in the parameter list of its <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>.
3975                </li>
3976</ul></div>
3977          </li>
3978<li class="listitem">
3979            On compilers that support variable templates, <code class="computeroutput"><span class="identifier">has_varargs_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> is equivalent to <code class="computeroutput"><span class="identifier">has_varargs</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code>.
3980          </li>
3981</ul></div>
3982<h5>
3983<a name="callable_traits.reference.ref_has_varargs.h4"></a>
3984        <span class="phrase"><a name="callable_traits.reference.ref_has_varargs.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_varargs.input_output_examples">Input/Output
3985        Examples</a>
3986      </h5>
3987<div class="informaltable"><table class="table">
3988<colgroup>
3989<col>
3990<col>
3991</colgroup>
3992<thead><tr>
3993<th>
3994                <p>
3995                  <code class="computeroutput"><span class="identifier">T</span></code>
3996                </p>
3997              </th>
3998<th>
3999                <p>
4000                  <code class="computeroutput"><span class="identifier">has_varargs_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
4001                </p>
4002              </th>
4003</tr></thead>
4004<tbody>
4005<tr>
4006<td>
4007                <p>
4008                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(...)</span></code>
4009                </p>
4010              </td>
4011<td>
4012                <p>
4013                  <code class="computeroutput"><span class="keyword">true</span></code>
4014                </p>
4015              </td>
4016</tr>
4017<tr>
4018<td>
4019                <p>
4020                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="special">...)</span> <span class="keyword">const</span></code>
4021                </p>
4022              </td>
4023<td>
4024                <p>
4025                  <code class="computeroutput"><span class="keyword">true</span></code>
4026                </p>
4027              </td>
4028</tr>
4029<tr>
4030<td>
4031                <p>
4032                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(*</span>
4033                  <span class="keyword">volatile</span><span class="special">)(...)</span></code>
4034                </p>
4035              </td>
4036<td>
4037                <p>
4038                  <code class="computeroutput"><span class="keyword">true</span></code>
4039                </p>
4040              </td>
4041</tr>
4042<tr>
4043<td>
4044                <p>
4045                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(&amp;)(...)</span></code>
4046                </p>
4047              </td>
4048<td>
4049                <p>
4050                  <code class="computeroutput"><span class="keyword">true</span></code>
4051                </p>
4052              </td>
4053</tr>
4054<tr>
4055<td>
4056                <p>
4057                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(...)</span>
4058                  <span class="keyword">const</span></code>
4059                </p>
4060              </td>
4061<td>
4062                <p>
4063                  <code class="computeroutput"><span class="keyword">true</span></code>
4064                </p>
4065              </td>
4066</tr>
4067<tr>
4068<td>
4069                <p>
4070                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(*)()</span></code>
4071                </p>
4072              </td>
4073<td>
4074                <p>
4075                  <code class="computeroutput"><span class="keyword">false</span></code>
4076                </p>
4077              </td>
4078</tr>
4079<tr>
4080<td>
4081                <p>
4082                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(*&amp;)()</span></code>
4083                </p>
4084              </td>
4085<td>
4086                <p>
4087                  <code class="computeroutput"><span class="keyword">false</span></code>
4088                </p>
4089              </td>
4090</tr>
4091<tr>
4092<td>
4093                <p>
4094                  <code class="computeroutput"><span class="keyword">int</span></code>
4095                </p>
4096              </td>
4097<td>
4098                <p>
4099                  <code class="computeroutput"><span class="keyword">false</span></code>
4100                </p>
4101              </td>
4102</tr>
4103<tr>
4104<td>
4105                <p>
4106                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">int</span></code>
4107                </p>
4108              </td>
4109<td>
4110                <p>
4111                  <code class="computeroutput"><span class="keyword">false</span></code>
4112                </p>
4113              </td>
4114</tr>
4115<tr>
4116<td>
4117                <p>
4118                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
4119                </p>
4120              </td>
4121<td>
4122                <p>
4123                  <code class="computeroutput"><span class="keyword">false</span></code>
4124                </p>
4125              </td>
4126</tr>
4127</tbody>
4128</table></div>
4129<h5>
4130<a name="callable_traits.reference.ref_has_varargs.h5"></a>
4131        <span class="phrase"><a name="callable_traits.reference.ref_has_varargs.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_varargs.example_program">Example
4132        Program</a>
4133      </h5>
4134<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
4135<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">has_varargs</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4136
4137<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
4138
4139<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">has_varargs</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(...)&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
4140<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">has_varargs</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
4141
4142<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
4143</pre>
4144</div>
4145<div class="section">
4146<div class="titlepage"><div><div><h3 class="title">
4147<a name="callable_traits.reference.ref_has_void_return"></a><a class="link" href="reference.html#callable_traits.reference.ref_has_void_return" title="has_void_return">has_void_return</a>
4148</h3></div></div></div>
4149<h5>
4150<a name="callable_traits.reference.ref_has_void_return.h0"></a>
4151        <span class="phrase"><a name="callable_traits.reference.ref_has_void_return.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_void_return.header">Header</a>
4152      </h5>
4153<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">has_void_return</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
4154<h5>
4155<a name="callable_traits.reference.ref_has_void_return.h1"></a>
4156        <span class="phrase"><a name="callable_traits.reference.ref_has_void_return.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_void_return.definition">Definition</a>
4157      </h5>
4158<pre class="programlisting"><span class="comment">// inherits from either std::true_type or std::false_type</span>
4159<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
4160<span class="keyword">struct</span> <span class="identifier">has_void_return</span><span class="special">;</span>
4161
4162
4163<span class="comment">// only available when variable templates are supported</span>
4164<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
4165<span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="identifier">has_void_return_v</span> <span class="special">=</span> <span class="comment">//see below</span>
4166</pre>
4167<h5>
4168<a name="callable_traits.reference.ref_has_void_return.h2"></a>
4169        <span class="phrase"><a name="callable_traits.reference.ref_has_void_return.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_void_return.constraints">Constraints</a>
4170      </h5>
4171<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
4172            none
4173          </li></ul></div>
4174<h5>
4175<a name="callable_traits.reference.ref_has_void_return.h3"></a>
4176        <span class="phrase"><a name="callable_traits.reference.ref_has_void_return.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_void_return.behavior">Behavior</a>
4177      </h5>
4178<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4179<li class="listitem">
4180            <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">false_type</span></code> is inherited by <code class="computeroutput"><span class="identifier">has_void_return</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
4181            and is aliased by <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">has_void_return</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span></code>, except when one of the following
4182            criteria is met, in which case <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">true_type</span></code>
4183            would be similarly inherited and aliased:
4184            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
4185<li class="listitem">
4186                  <code class="computeroutput"><span class="identifier">T</span></code> is a function,
4187                  function pointer, or function reference where the function's return
4188                  type is <code class="computeroutput"><span class="keyword">void</span></code>.
4189                </li>
4190<li class="listitem">
4191                  <code class="computeroutput"><span class="identifier">T</span></code> is a pointer
4192                  to a member function whose return type is <code class="computeroutput"><span class="keyword">void</span></code>.
4193                </li>
4194<li class="listitem">
4195                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
4196                  object with a non-overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>, where the <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code> function returns <code class="computeroutput"><span class="keyword">void</span></code>.
4197                </li>
4198</ul></div>
4199          </li>
4200<li class="listitem">
4201            On compilers that support variable templates, <code class="computeroutput"><span class="identifier">has_void_return_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> is equivalent to <code class="computeroutput"><span class="identifier">has_void_return</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code>.
4202          </li>
4203</ul></div>
4204<h5>
4205<a name="callable_traits.reference.ref_has_void_return.h4"></a>
4206        <span class="phrase"><a name="callable_traits.reference.ref_has_void_return.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_void_return.input_output_examples">Input/Output
4207        Examples</a>
4208      </h5>
4209<div class="informaltable"><table class="table">
4210<colgroup>
4211<col>
4212<col>
4213</colgroup>
4214<thead><tr>
4215<th>
4216                <p>
4217                  <code class="computeroutput"><span class="identifier">T</span></code>
4218                </p>
4219              </th>
4220<th>
4221                <p>
4222                  <code class="computeroutput"><span class="identifier">has_void_return_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
4223                </p>
4224              </th>
4225</tr></thead>
4226<tbody>
4227<tr>
4228<td>
4229                <p>
4230                  <code class="computeroutput"><span class="keyword">void</span><span class="special">()</span></code>
4231                </p>
4232              </td>
4233<td>
4234                <p>
4235                  <code class="computeroutput"><span class="keyword">true</span></code>
4236                </p>
4237              </td>
4238</tr>
4239<tr>
4240<td>
4241                <p>
4242                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span> <span class="keyword">const</span></code>
4243                </p>
4244              </td>
4245<td>
4246                <p>
4247                  <code class="computeroutput"><span class="keyword">true</span></code>
4248                </p>
4249              </td>
4250</tr>
4251<tr>
4252<td>
4253                <p>
4254                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(*</span>
4255                  <span class="keyword">const</span> <span class="special">&amp;)()</span></code>
4256                </p>
4257              </td>
4258<td>
4259                <p>
4260                  <code class="computeroutput"><span class="keyword">true</span></code>
4261                </p>
4262              </td>
4263</tr>
4264<tr>
4265<td>
4266                <p>
4267                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(&amp;)()</span></code>
4268                </p>
4269              </td>
4270<td>
4271                <p>
4272                  <code class="computeroutput"><span class="keyword">true</span></code>
4273                </p>
4274              </td>
4275</tr>
4276<tr>
4277<td>
4278                <p>
4279                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
4280                  <span class="keyword">const</span></code>
4281                </p>
4282              </td>
4283<td>
4284                <p>
4285                  <code class="computeroutput"><span class="keyword">true</span></code>
4286                </p>
4287              </td>
4288</tr>
4289<tr>
4290<td>
4291                <p>
4292                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span></code>
4293                </p>
4294              </td>
4295<td>
4296                <p>
4297                  <code class="computeroutput"><span class="keyword">false</span></code>
4298                </p>
4299              </td>
4300</tr>
4301<tr>
4302<td>
4303                <p>
4304                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*&amp;)()</span></code>
4305                </p>
4306              </td>
4307<td>
4308                <p>
4309                  <code class="computeroutput"><span class="keyword">false</span></code>
4310                </p>
4311              </td>
4312</tr>
4313<tr>
4314<td>
4315                <p>
4316                  <code class="computeroutput"><span class="keyword">int</span></code>
4317                </p>
4318              </td>
4319<td>
4320                <p>
4321                  <code class="computeroutput"><span class="keyword">false</span></code>
4322                </p>
4323              </td>
4324</tr>
4325<tr>
4326<td>
4327                <p>
4328                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
4329                </p>
4330              </td>
4331<td>
4332                <p>
4333                  <code class="computeroutput"><span class="keyword">false</span></code>
4334                </p>
4335              </td>
4336</tr>
4337<tr>
4338<td>
4339                <p>
4340                  <code class="computeroutput"><span class="keyword">void</span><span class="special">*</span>
4341                  <span class="identifier">foo</span><span class="special">::*</span></code>
4342                </p>
4343              </td>
4344<td>
4345                <p>
4346                  <code class="computeroutput"><span class="keyword">false</span></code>
4347                </p>
4348              </td>
4349</tr>
4350</tbody>
4351</table></div>
4352<h5>
4353<a name="callable_traits.reference.ref_has_void_return.h5"></a>
4354        <span class="phrase"><a name="callable_traits.reference.ref_has_void_return.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_has_void_return.example_program">Example
4355        Program</a>
4356      </h5>
4357<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
4358<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">has_void_return</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4359
4360<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
4361
4362<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">has_void_return</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
4363<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">has_void_return</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
4364
4365<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
4366</pre>
4367</div>
4368<div class="section">
4369<div class="titlepage"><div><div><h3 class="title">
4370<a name="callable_traits.reference.ref_is_const_member"></a><a class="link" href="reference.html#callable_traits.reference.ref_is_const_member" title="is_const_member">is_const_member</a>
4371</h3></div></div></div>
4372<h5>
4373<a name="callable_traits.reference.ref_is_const_member.h0"></a>
4374        <span class="phrase"><a name="callable_traits.reference.ref_is_const_member.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_const_member.header">Header</a>
4375      </h5>
4376<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_const_member</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
4377<h5>
4378<a name="callable_traits.reference.ref_is_const_member.h1"></a>
4379        <span class="phrase"><a name="callable_traits.reference.ref_is_const_member.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_const_member.definition">Definition</a>
4380      </h5>
4381<pre class="programlisting"><span class="comment">// inherits from either std::true_type or std::false_type</span>
4382<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
4383<span class="keyword">struct</span> <span class="identifier">is_const_member</span><span class="special">;</span>
4384
4385<span class="comment">// only available when variable templates are supported</span>
4386<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
4387<span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="identifier">is_const_member_v</span> <span class="special">=</span> <span class="comment">//see below</span>
4388</pre>
4389<h5>
4390<a name="callable_traits.reference.ref_is_const_member.h2"></a>
4391        <span class="phrase"><a name="callable_traits.reference.ref_is_const_member.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_const_member.constraints">Constraints</a>
4392      </h5>
4393<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
4394            none
4395          </li></ul></div>
4396<h5>
4397<a name="callable_traits.reference.ref_is_const_member.h3"></a>
4398        <span class="phrase"><a name="callable_traits.reference.ref_is_const_member.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_const_member.behavior">Behavior</a>
4399      </h5>
4400<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4401<li class="listitem">
4402            <code class="computeroutput"><span class="identifier">is_const_member</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code> is <code class="computeroutput"><span class="keyword">true</span></code>
4403            when either:
4404            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
4405<li class="listitem">
4406                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
4407                  type with a <code class="computeroutput"><span class="keyword">const</span></code>
4408                  member qualifier
4409                </li>
4410<li class="listitem">
4411                  <code class="computeroutput"><span class="identifier">T</span></code> is a pointer
4412                  to a member function with a <code class="computeroutput"><span class="keyword">const</span></code>
4413                  member qualifier
4414                </li>
4415<li class="listitem">
4416                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
4417                  object with a non-overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>, where the <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code> has a <code class="computeroutput"><span class="keyword">const</span></code>
4418                  member qualifier
4419                </li>
4420</ul></div>
4421          </li>
4422<li class="listitem">
4423            On compilers that support variable templates, <code class="computeroutput"><span class="identifier">is_const_member_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_const_member</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code>.
4424          </li>
4425</ul></div>
4426<h5>
4427<a name="callable_traits.reference.ref_is_const_member.h4"></a>
4428        <span class="phrase"><a name="callable_traits.reference.ref_is_const_member.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_const_member.input_output_examples">Input/Output
4429        Examples</a>
4430      </h5>
4431<div class="informaltable"><table class="table">
4432<colgroup>
4433<col>
4434<col>
4435</colgroup>
4436<thead><tr>
4437<th>
4438                <p>
4439                  <code class="computeroutput"><span class="identifier">T</span></code>
4440                </p>
4441              </th>
4442<th>
4443                <p>
4444                  <code class="computeroutput"><span class="identifier">is_const_member_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
4445                </p>
4446              </th>
4447</tr></thead>
4448<tbody>
4449<tr>
4450<td>
4451                <p>
4452                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
4453                  <span class="keyword">const</span></code>
4454                </p>
4455              </td>
4456<td>
4457                <p>
4458                  <code class="computeroutput"><span class="keyword">true</span></code>
4459                </p>
4460              </td>
4461</tr>
4462<tr>
4463<td>
4464                <p>
4465                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
4466                  <span class="keyword">const</span> <span class="keyword">volatile</span></code>
4467                </p>
4468              </td>
4469<td>
4470                <p>
4471                  <code class="computeroutput"><span class="keyword">true</span></code>
4472                </p>
4473              </td>
4474</tr>
4475<tr>
4476<td>
4477                <p>
4478                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
4479                  <span class="keyword">const</span> <span class="special">&amp;</span>
4480                  <span class="identifier">transaction_safe</span></code>
4481                </p>
4482              </td>
4483<td>
4484                <p>
4485                  <code class="computeroutput"><span class="keyword">true</span></code>
4486                </p>
4487              </td>
4488</tr>
4489<tr>
4490<td>
4491                <p>
4492                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
4493                  <span class="keyword">const</span> <span class="special">&amp;&amp;</span></code>
4494                </p>
4495              </td>
4496<td>
4497                <p>
4498                  <code class="computeroutput"><span class="keyword">true</span></code>
4499                </p>
4500              </td>
4501</tr>
4502<tr>
4503<td>
4504                <p>
4505                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*&amp;)()</span>
4506                  <span class="keyword">const</span></code>
4507                </p>
4508              </td>
4509<td>
4510                <p>
4511                  <code class="computeroutput"><span class="keyword">true</span></code>
4512                </p>
4513              </td>
4514</tr>
4515<tr>
4516<td>
4517                <p>
4518                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
4519                  <span class="keyword">const</span> <span class="keyword">volatile</span></code>
4520                </p>
4521              </td>
4522<td>
4523                <p>
4524                  <code class="computeroutput"><span class="keyword">true</span></code>
4525                </p>
4526              </td>
4527</tr>
4528<tr>
4529<td>
4530                <p>
4531                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
4532                  <span class="keyword">const</span> <span class="keyword">volatile</span>
4533                  <span class="special">&amp;&amp;</span></code>
4534                </p>
4535              </td>
4536<td>
4537                <p>
4538                  <code class="computeroutput"><span class="keyword">true</span></code>
4539                </p>
4540              </td>
4541</tr>
4542<tr>
4543<td>
4544                <p>
4545                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
4546                  <span class="keyword">const</span><span class="special">)()</span>
4547                  <span class="keyword">const</span></code>
4548                </p>
4549              </td>
4550<td>
4551                <p>
4552                  <code class="computeroutput"><span class="keyword">true</span></code>
4553                </p>
4554              </td>
4555</tr>
4556<tr>
4557<td>
4558                <p>
4559                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
4560                </p>
4561              </td>
4562<td>
4563                <p>
4564                  <code class="computeroutput"><span class="keyword">false</span></code>
4565                </p>
4566              </td>
4567</tr>
4568<tr>
4569<td>
4570                <p>
4571                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
4572                  <span class="keyword">volatile</span></code>
4573                </p>
4574              </td>
4575<td>
4576                <p>
4577                  <code class="computeroutput"><span class="keyword">false</span></code>
4578                </p>
4579              </td>
4580</tr>
4581<tr>
4582<td>
4583                <p>
4584                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
4585                  <span class="special">&amp;&amp;</span></code>
4586                </p>
4587              </td>
4588<td>
4589                <p>
4590                  <code class="computeroutput"><span class="keyword">false</span></code>
4591                </p>
4592              </td>
4593</tr>
4594<tr>
4595<td>
4596                <p>
4597                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span></code>
4598                </p>
4599              </td>
4600<td>
4601                <p>
4602                  <code class="computeroutput"><span class="keyword">false</span></code>
4603                </p>
4604              </td>
4605</tr>
4606<tr>
4607<td>
4608                <p>
4609                  <code class="computeroutput"><span class="keyword">int</span></code>
4610                </p>
4611              </td>
4612<td>
4613                <p>
4614                  <code class="computeroutput"><span class="keyword">false</span></code>
4615                </p>
4616              </td>
4617</tr>
4618<tr>
4619<td>
4620                <p>
4621                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
4622                </p>
4623              </td>
4624<td>
4625                <p>
4626                  <code class="computeroutput"><span class="keyword">false</span></code>
4627                </p>
4628              </td>
4629</tr>
4630<tr>
4631<td>
4632                <p>
4633                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">int</span>
4634                  <span class="identifier">foo</span><span class="special">::*</span></code>
4635                </p>
4636              </td>
4637<td>
4638                <p>
4639                  <code class="computeroutput"><span class="keyword">false</span></code>
4640                </p>
4641              </td>
4642</tr>
4643</tbody>
4644</table></div>
4645<h5>
4646<a name="callable_traits.reference.ref_is_const_member.h5"></a>
4647        <span class="phrase"><a name="callable_traits.reference.ref_is_const_member.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_const_member.example_program">Example
4648        Program</a>
4649      </h5>
4650<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
4651<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_const_member</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4652
4653<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
4654
4655<span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">;</span>
4656
4657<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_const_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
4658<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_const_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
4659
4660<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
4661</pre>
4662</div>
4663<div class="section">
4664<div class="titlepage"><div><div><h3 class="title">
4665<a name="callable_traits.reference.ref_is_cv_member"></a><a class="link" href="reference.html#callable_traits.reference.ref_is_cv_member" title="is_cv_member">is_cv_member</a>
4666</h3></div></div></div>
4667<h5>
4668<a name="callable_traits.reference.ref_is_cv_member.h0"></a>
4669        <span class="phrase"><a name="callable_traits.reference.ref_is_cv_member.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_cv_member.header">Header</a>
4670      </h5>
4671<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_cv_member</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
4672<h5>
4673<a name="callable_traits.reference.ref_is_cv_member.h1"></a>
4674        <span class="phrase"><a name="callable_traits.reference.ref_is_cv_member.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_cv_member.definition">Definition</a>
4675      </h5>
4676<pre class="programlisting"><span class="comment">// inherits from either std::true_type or std::false_type</span>
4677<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
4678<span class="keyword">struct</span> <span class="identifier">is_cv_member</span><span class="special">;</span>
4679
4680<span class="comment">// only available when variable templates are supported</span>
4681<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
4682<span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="identifier">is_cv_member_v</span> <span class="special">=</span> <span class="comment">//see below</span>
4683</pre>
4684<h5>
4685<a name="callable_traits.reference.ref_is_cv_member.h2"></a>
4686        <span class="phrase"><a name="callable_traits.reference.ref_is_cv_member.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_cv_member.constraints">Constraints</a>
4687      </h5>
4688<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
4689            none
4690          </li></ul></div>
4691<h5>
4692<a name="callable_traits.reference.ref_is_cv_member.h3"></a>
4693        <span class="phrase"><a name="callable_traits.reference.ref_is_cv_member.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_cv_member.behavior">Behavior</a>
4694      </h5>
4695<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4696<li class="listitem">
4697            <code class="computeroutput"><span class="identifier">is_cv_member</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code> is <code class="computeroutput"><span class="keyword">true</span></code>
4698            when either:
4699            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
4700<li class="listitem">
4701                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
4702                  type with both <code class="computeroutput"><span class="keyword">const</span></code>
4703                  and <code class="computeroutput"><span class="keyword">volatile</span></code> member
4704                  qualifiers
4705                </li>
4706<li class="listitem">
4707                  <code class="computeroutput"><span class="identifier">T</span></code> is a pointer
4708                  to a member function with both <code class="computeroutput"><span class="keyword">const</span></code>
4709                  and <code class="computeroutput"><span class="keyword">volatile</span></code> member
4710                  qualifiers
4711                </li>
4712<li class="listitem">
4713                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
4714                  object with a non-overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>, where the <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code> has both <code class="computeroutput"><span class="keyword">const</span></code>
4715                  and <code class="computeroutput"><span class="keyword">volatile</span></code> member
4716                  qualifiers
4717                </li>
4718</ul></div>
4719          </li>
4720<li class="listitem">
4721            On compilers that support variable templates, <code class="computeroutput"><span class="identifier">is_cv_member_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_cv_member</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code>.
4722          </li>
4723</ul></div>
4724<h5>
4725<a name="callable_traits.reference.ref_is_cv_member.h4"></a>
4726        <span class="phrase"><a name="callable_traits.reference.ref_is_cv_member.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_cv_member.input_output_examples">Input/Output
4727        Examples</a>
4728      </h5>
4729<div class="informaltable"><table class="table">
4730<colgroup>
4731<col>
4732<col>
4733</colgroup>
4734<thead><tr>
4735<th>
4736                <p>
4737                  <code class="computeroutput"><span class="identifier">T</span></code>
4738                </p>
4739              </th>
4740<th>
4741                <p>
4742                  <code class="computeroutput"><span class="identifier">is_cv_member_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
4743                </p>
4744              </th>
4745</tr></thead>
4746<tbody>
4747<tr>
4748<td>
4749                <p>
4750                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
4751                  <span class="keyword">const</span> <span class="keyword">volatile</span></code>
4752                </p>
4753              </td>
4754<td>
4755                <p>
4756                  <code class="computeroutput"><span class="keyword">true</span></code>
4757                </p>
4758              </td>
4759</tr>
4760<tr>
4761<td>
4762                <p>
4763                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
4764                  <span class="keyword">const</span> <span class="keyword">volatile</span>
4765                  <span class="special">&amp;</span></code>
4766                </p>
4767              </td>
4768<td>
4769                <p>
4770                  <code class="computeroutput"><span class="keyword">true</span></code>
4771                </p>
4772              </td>
4773</tr>
4774<tr>
4775<td>
4776                <p>
4777                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
4778                  <span class="keyword">const</span> <span class="special">&amp;)()</span>
4779                  <span class="keyword">const</span> <span class="keyword">volatile</span></code>
4780                </p>
4781              </td>
4782<td>
4783                <p>
4784                  <code class="computeroutput"><span class="keyword">true</span></code>
4785                </p>
4786              </td>
4787</tr>
4788<tr>
4789<td>
4790                <p>
4791                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
4792                  <span class="keyword">const</span></code>
4793                </p>
4794              </td>
4795<td>
4796                <p>
4797                  <code class="computeroutput"><span class="keyword">false</span></code>
4798                </p>
4799              </td>
4800</tr>
4801<tr>
4802<td>
4803                <p>
4804                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
4805                  <span class="keyword">volatile</span></code>
4806                </p>
4807              </td>
4808<td>
4809                <p>
4810                  <code class="computeroutput"><span class="keyword">false</span></code>
4811                </p>
4812              </td>
4813</tr>
4814<tr>
4815<td>
4816                <p>
4817                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
4818                  <span class="keyword">const</span></code>
4819                </p>
4820              </td>
4821<td>
4822                <p>
4823                  <code class="computeroutput"><span class="keyword">false</span></code>
4824                </p>
4825              </td>
4826</tr>
4827<tr>
4828<td>
4829                <p>
4830                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
4831                  <span class="keyword">const</span></code>
4832                </p>
4833              </td>
4834<td>
4835                <p>
4836                  <code class="computeroutput"><span class="keyword">false</span></code>
4837                </p>
4838              </td>
4839</tr>
4840<tr>
4841<td>
4842                <p>
4843                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
4844                  <span class="keyword">volatile</span></code>
4845                </p>
4846              </td>
4847<td>
4848                <p>
4849                  <code class="computeroutput"><span class="keyword">false</span></code>
4850                </p>
4851              </td>
4852</tr>
4853<tr>
4854<td>
4855                <p>
4856                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
4857                  <span class="special">&amp;&amp;</span></code>
4858                </p>
4859              </td>
4860<td>
4861                <p>
4862                  <code class="computeroutput"><span class="keyword">false</span></code>
4863                </p>
4864              </td>
4865</tr>
4866<tr>
4867<td>
4868                <p>
4869                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span></code>
4870                </p>
4871              </td>
4872<td>
4873                <p>
4874                  <code class="computeroutput"><span class="keyword">false</span></code>
4875                </p>
4876              </td>
4877</tr>
4878<tr>
4879<td>
4880                <p>
4881                  <code class="computeroutput"><span class="keyword">int</span></code>
4882                </p>
4883              </td>
4884<td>
4885                <p>
4886                  <code class="computeroutput"><span class="keyword">false</span></code>
4887                </p>
4888              </td>
4889</tr>
4890<tr>
4891<td>
4892                <p>
4893                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
4894                </p>
4895              </td>
4896<td>
4897                <p>
4898                  <code class="computeroutput"><span class="keyword">false</span></code>
4899                </p>
4900              </td>
4901</tr>
4902<tr>
4903<td>
4904                <p>
4905                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">int</span>
4906                  <span class="identifier">foo</span><span class="special">::*</span></code>
4907                </p>
4908              </td>
4909<td>
4910                <p>
4911                  <code class="computeroutput"><span class="keyword">false</span></code>
4912                </p>
4913              </td>
4914</tr>
4915</tbody>
4916</table></div>
4917<h5>
4918<a name="callable_traits.reference.ref_is_cv_member.h5"></a>
4919        <span class="phrase"><a name="callable_traits.reference.ref_is_cv_member.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_cv_member.example_program">Example
4920        Program</a>
4921      </h5>
4922<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
4923<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_cv_member</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4924
4925<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
4926
4927<span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">;</span>
4928
4929<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_cv_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="keyword">volatile</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
4930<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_cv_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
4931<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_cv_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
4932<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_cv_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">volatile</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
4933
4934<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
4935</pre>
4936</div>
4937<div class="section">
4938<div class="titlepage"><div><div><h3 class="title">
4939<a name="callable_traits.reference.ref_is_invocable"></a><a class="link" href="reference.html#callable_traits.reference.ref_is_invocable" title="is_invocable">is_invocable</a>
4940</h3></div></div></div>
4941<h5>
4942<a name="callable_traits.reference.ref_is_invocable.h0"></a>
4943        <span class="phrase"><a name="callable_traits.reference.ref_is_invocable.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_invocable.header">Header</a>
4944      </h5>
4945<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_invocable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
4946<h5>
4947<a name="callable_traits.reference.ref_is_invocable.h1"></a>
4948        <span class="phrase"><a name="callable_traits.reference.ref_is_invocable.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_invocable.definition">Definition</a>
4949      </h5>
4950<pre class="programlisting"><span class="comment">// inherits from either std::true_type or std::false_type</span>
4951<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
4952<span class="keyword">struct</span> <span class="identifier">is_invocable</span><span class="special">;</span>
4953
4954<span class="comment">// inherits from either std::true_type or std::false_type</span>
4955<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Ret</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
4956<span class="keyword">struct</span> <span class="identifier">is_invocable_r</span><span class="special">;</span>
4957
4958<span class="comment">// only available when variable templates are supported</span>
4959<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
4960<span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="identifier">is_invocable_v</span> <span class="special">=</span> <span class="comment">//see below</span>
4961
4962<span class="comment">// only available when variable templates are supported</span>
4963<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Ret</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
4964<span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="identifier">is_invocable_r_v</span> <span class="special">=</span> <span class="comment">//see below</span>
4965</pre>
4966<h5>
4967<a name="callable_traits.reference.ref_is_invocable.h2"></a>
4968        <span class="phrase"><a name="callable_traits.reference.ref_is_invocable.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_invocable.constraints">Constraints</a>
4969      </h5>
4970<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
4971            none
4972          </li></ul></div>
4973<h5>
4974<a name="callable_traits.reference.ref_is_invocable.h3"></a>
4975        <span class="phrase"><a name="callable_traits.reference.ref_is_invocable.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_invocable.behavior">Behavior</a>
4976      </h5>
4977<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
4978<p class="simpara">
4979            standalone c++11 implementation of c++17 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_invocable</span></code>,
4980            <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_invocable_r</span></code>
4981          </p>
4982<div class="note"><table border="0" summary="Note">
4983<tr>
4984<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../doc/src/images/note.png"></td>
4985<th align="left">Note</th>
4986</tr>
4987<tr><td align="left" valign="top"><p>
4988              ref-qualified overloads of <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code> with different signatures are not
4989              handled correctly yet.
4990            </p></td></tr>
4991</table></div>
4992</li></ul></div>
4993<h5>
4994<a name="callable_traits.reference.ref_is_invocable.h4"></a>
4995        <span class="phrase"><a name="callable_traits.reference.ref_is_invocable.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_invocable.example_program">Example
4996        Program</a>
4997      </h5>
4998<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
4999<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_invocable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5000
5001<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
5002
5003<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">{</span>
5004    <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
5005    <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_integral</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">&gt;::</span><span class="identifier">type</span>
5006    <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">T</span><span class="special">){}</span>
5007<span class="special">};</span>
5008
5009<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_invocable</span><span class="special">&lt;</span><span class="identifier">foo</span><span class="special">,</span> <span class="keyword">int</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5010<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_invocable</span><span class="special">&lt;</span><span class="identifier">foo</span><span class="special">,</span> <span class="keyword">double</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5011
5012<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
5013</pre>
5014</div>
5015<div class="section">
5016<div class="titlepage"><div><div><h3 class="title">
5017<a name="callable_traits.reference.ref_is_lvalue_reference_member"></a><a class="link" href="reference.html#callable_traits.reference.ref_is_lvalue_reference_member" title="is_lvalue_reference_member">is_lvalue_reference_member</a>
5018</h3></div></div></div>
5019<h5>
5020<a name="callable_traits.reference.ref_is_lvalue_reference_member.h0"></a>
5021        <span class="phrase"><a name="callable_traits.reference.ref_is_lvalue_reference_member.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_lvalue_reference_member.header">Header</a>
5022      </h5>
5023<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_lvalue_reference_member</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
5024<h5>
5025<a name="callable_traits.reference.ref_is_lvalue_reference_member.h1"></a>
5026        <span class="phrase"><a name="callable_traits.reference.ref_is_lvalue_reference_member.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_lvalue_reference_member.definition">Definition</a>
5027      </h5>
5028<pre class="programlisting"><span class="comment">// inherits from either std::true_type or std::false_type</span>
5029<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
5030<span class="keyword">struct</span> <span class="identifier">is_lvalue_reference_member</span><span class="special">;</span>
5031
5032<span class="comment">// only available when variable templates are supported</span>
5033<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
5034<span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="identifier">is_lvalue_reference_member_v</span> <span class="special">=</span> <span class="comment">//see below</span>
5035</pre>
5036<h5>
5037<a name="callable_traits.reference.ref_is_lvalue_reference_member.h2"></a>
5038        <span class="phrase"><a name="callable_traits.reference.ref_is_lvalue_reference_member.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_lvalue_reference_member.constraints">Constraints</a>
5039      </h5>
5040<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
5041            none
5042          </li></ul></div>
5043<h5>
5044<a name="callable_traits.reference.ref_is_lvalue_reference_member.h3"></a>
5045        <span class="phrase"><a name="callable_traits.reference.ref_is_lvalue_reference_member.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_lvalue_reference_member.behavior">Behavior</a>
5046      </h5>
5047<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5048<li class="listitem">
5049            <code class="computeroutput"><span class="identifier">is_lvalue_reference_member</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code>
5050            is <code class="computeroutput"><span class="keyword">true</span></code> when either:
5051            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
5052<li class="listitem">
5053                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
5054                  type with a '&amp;' member qualifier
5055                </li>
5056<li class="listitem">
5057                  <code class="computeroutput"><span class="identifier">T</span></code> is a pointer
5058                  to a member function with a '&amp;' member qualifiers
5059                </li>
5060<li class="listitem">
5061                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
5062                  object with a non-overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>, where the <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code> has a '&amp;' member qualifier
5063                </li>
5064</ul></div>
5065          </li>
5066<li class="listitem">
5067            On compilers that support variable templates, <code class="computeroutput"><span class="identifier">is_lvalue_reference_member_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_lvalue_reference_member</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code>.
5068          </li>
5069</ul></div>
5070<h5>
5071<a name="callable_traits.reference.ref_is_lvalue_reference_member.h4"></a>
5072        <span class="phrase"><a name="callable_traits.reference.ref_is_lvalue_reference_member.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_lvalue_reference_member.input_output_examples">Input/Output
5073        Examples</a>
5074      </h5>
5075<div class="informaltable"><table class="table">
5076<colgroup>
5077<col>
5078<col>
5079</colgroup>
5080<thead><tr>
5081<th>
5082                <p>
5083                  <code class="computeroutput"><span class="identifier">T</span></code>
5084                </p>
5085              </th>
5086<th>
5087                <p>
5088                  <code class="computeroutput"><span class="identifier">is_lvalue_reference_member_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
5089                </p>
5090              </th>
5091</tr></thead>
5092<tbody>
5093<tr>
5094<td>
5095                <p>
5096                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5097                  <span class="special">&amp;</span></code>
5098                </p>
5099              </td>
5100<td>
5101                <p>
5102                  <code class="computeroutput"><span class="keyword">true</span></code>
5103                </p>
5104              </td>
5105</tr>
5106<tr>
5107<td>
5108                <p>
5109                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
5110                  <span class="keyword">const</span><span class="special">)()</span>
5111                  <span class="keyword">const</span> <span class="special">&amp;</span></code>
5112                </p>
5113              </td>
5114<td>
5115                <p>
5116                  <code class="computeroutput"><span class="keyword">true</span></code>
5117                </p>
5118              </td>
5119</tr>
5120<tr>
5121<td>
5122                <p>
5123                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5124                  <span class="keyword">const</span></code>
5125                </p>
5126              </td>
5127<td>
5128                <p>
5129                  <code class="computeroutput"><span class="keyword">false</span></code>
5130                </p>
5131              </td>
5132</tr>
5133<tr>
5134<td>
5135                <p>
5136                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5137                  <span class="keyword">volatile</span></code>
5138                </p>
5139              </td>
5140<td>
5141                <p>
5142                  <code class="computeroutput"><span class="keyword">false</span></code>
5143                </p>
5144              </td>
5145</tr>
5146<tr>
5147<td>
5148                <p>
5149                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
5150                  <span class="keyword">const</span></code>
5151                </p>
5152              </td>
5153<td>
5154                <p>
5155                  <code class="computeroutput"><span class="keyword">false</span></code>
5156                </p>
5157              </td>
5158</tr>
5159<tr>
5160<td>
5161                <p>
5162                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5163                  <span class="keyword">const</span></code>
5164                </p>
5165              </td>
5166<td>
5167                <p>
5168                  <code class="computeroutput"><span class="keyword">false</span></code>
5169                </p>
5170              </td>
5171</tr>
5172<tr>
5173<td>
5174                <p>
5175                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5176                  <span class="keyword">volatile</span></code>
5177                </p>
5178              </td>
5179<td>
5180                <p>
5181                  <code class="computeroutput"><span class="keyword">false</span></code>
5182                </p>
5183              </td>
5184</tr>
5185<tr>
5186<td>
5187                <p>
5188                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5189                  <span class="special">&amp;&amp;</span></code>
5190                </p>
5191              </td>
5192<td>
5193                <p>
5194                  <code class="computeroutput"><span class="keyword">false</span></code>
5195                </p>
5196              </td>
5197</tr>
5198<tr>
5199<td>
5200                <p>
5201                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span></code>
5202                </p>
5203              </td>
5204<td>
5205                <p>
5206                  <code class="computeroutput"><span class="keyword">false</span></code>
5207                </p>
5208              </td>
5209</tr>
5210<tr>
5211<td>
5212                <p>
5213                  <code class="computeroutput"><span class="keyword">int</span></code>
5214                </p>
5215              </td>
5216<td>
5217                <p>
5218                  <code class="computeroutput"><span class="keyword">false</span></code>
5219                </p>
5220              </td>
5221</tr>
5222<tr>
5223<td>
5224                <p>
5225                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
5226                </p>
5227              </td>
5228<td>
5229                <p>
5230                  <code class="computeroutput"><span class="keyword">false</span></code>
5231                </p>
5232              </td>
5233</tr>
5234<tr>
5235<td>
5236                <p>
5237                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">int</span>
5238                  <span class="identifier">foo</span><span class="special">::*</span></code>
5239                </p>
5240              </td>
5241<td>
5242                <p>
5243                  <code class="computeroutput"><span class="keyword">false</span></code>
5244                </p>
5245              </td>
5246</tr>
5247</tbody>
5248</table></div>
5249<h5>
5250<a name="callable_traits.reference.ref_is_lvalue_reference_member.h5"></a>
5251        <span class="phrase"><a name="callable_traits.reference.ref_is_lvalue_reference_member.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_lvalue_reference_member.example_program">Example
5252        Program</a>
5253      </h5>
5254<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
5255<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_lvalue_reference_member</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5256
5257<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
5258
5259<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_lvalue_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()&amp;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5260<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_lvalue_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()&amp;&amp;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5261<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_lvalue_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5262
5263<span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">;</span>
5264
5265<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_lvalue_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&amp;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5266<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_lvalue_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&amp;&amp;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5267<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_lvalue_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5268
5269<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
5270</pre>
5271</div>
5272<div class="section">
5273<div class="titlepage"><div><div><h3 class="title">
5274<a name="callable_traits.reference.ref_is_reference_member"></a><a class="link" href="reference.html#callable_traits.reference.ref_is_reference_member" title="is_reference_member">is_reference_member</a>
5275</h3></div></div></div>
5276<h5>
5277<a name="callable_traits.reference.ref_is_reference_member.h0"></a>
5278        <span class="phrase"><a name="callable_traits.reference.ref_is_reference_member.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_reference_member.header">Header</a>
5279      </h5>
5280<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_reference_member</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
5281<h5>
5282<a name="callable_traits.reference.ref_is_reference_member.h1"></a>
5283        <span class="phrase"><a name="callable_traits.reference.ref_is_reference_member.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_reference_member.definition">Definition</a>
5284      </h5>
5285<pre class="programlisting"><span class="comment">// inherits from either std::true_type or std::false_type</span>
5286<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
5287<span class="keyword">struct</span> <span class="identifier">is_reference_member</span><span class="special">;</span>
5288
5289<span class="comment">// only available when variable templates are supported</span>
5290<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
5291<span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="identifier">is_reference_member_v</span> <span class="special">=</span> <span class="comment">//see below</span>
5292</pre>
5293<h5>
5294<a name="callable_traits.reference.ref_is_reference_member.h2"></a>
5295        <span class="phrase"><a name="callable_traits.reference.ref_is_reference_member.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_reference_member.constraints">Constraints</a>
5296      </h5>
5297<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
5298            none
5299          </li></ul></div>
5300<h5>
5301<a name="callable_traits.reference.ref_is_reference_member.h3"></a>
5302        <span class="phrase"><a name="callable_traits.reference.ref_is_reference_member.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_reference_member.behavior">Behavior</a>
5303      </h5>
5304<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5305<li class="listitem">
5306            <code class="computeroutput"><span class="identifier">is_reference_member</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code> is <code class="computeroutput"><span class="keyword">true</span></code>
5307            when either:
5308            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
5309<li class="listitem">
5310                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
5311                  type with a '&amp;' or '&amp;&amp;' member qualifier
5312                </li>
5313<li class="listitem">
5314                  <code class="computeroutput"><span class="identifier">T</span></code> is a pointer
5315                  to a member function with a '&amp;' or '&amp;&amp;' member qualifiers
5316                </li>
5317<li class="listitem">
5318                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
5319                  object with a non-overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>, where the <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code> has a '&amp;' or '&amp;&amp;'
5320                  member qualifier
5321                </li>
5322</ul></div>
5323          </li>
5324<li class="listitem">
5325            On compilers that support variable templates, <code class="computeroutput"><span class="identifier">is_reference_member_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_reference_member</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code>.
5326          </li>
5327</ul></div>
5328<h5>
5329<a name="callable_traits.reference.ref_is_reference_member.h4"></a>
5330        <span class="phrase"><a name="callable_traits.reference.ref_is_reference_member.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_reference_member.input_output_examples">Input/Output
5331        Examples</a>
5332      </h5>
5333<div class="informaltable"><table class="table">
5334<colgroup>
5335<col>
5336<col>
5337</colgroup>
5338<thead><tr>
5339<th>
5340                <p>
5341                  <code class="computeroutput"><span class="identifier">T</span></code>
5342                </p>
5343              </th>
5344<th>
5345                <p>
5346                  <code class="computeroutput"><span class="identifier">is_reference_member_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
5347                </p>
5348              </th>
5349</tr></thead>
5350<tbody>
5351<tr>
5352<td>
5353                <p>
5354                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5355                  <span class="special">&amp;</span></code>
5356                </p>
5357              </td>
5358<td>
5359                <p>
5360                  <code class="computeroutput"><span class="keyword">true</span></code>
5361                </p>
5362              </td>
5363</tr>
5364<tr>
5365<td>
5366                <p>
5367                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5368                  <span class="keyword">const</span> <span class="special">&amp;&amp;</span></code>
5369                </p>
5370              </td>
5371<td>
5372                <p>
5373                  <code class="computeroutput"><span class="keyword">true</span></code>
5374                </p>
5375              </td>
5376</tr>
5377<tr>
5378<td>
5379                <p>
5380                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
5381                  <span class="keyword">const</span><span class="special">)()</span>
5382                  <span class="special">&amp;&amp;</span></code>
5383                </p>
5384              </td>
5385<td>
5386                <p>
5387                  <code class="computeroutput"><span class="keyword">true</span></code>
5388                </p>
5389              </td>
5390</tr>
5391<tr>
5392<td>
5393                <p>
5394                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(...)</span>
5395                  <span class="keyword">volatile</span> <span class="special">&amp;</span></code>
5396                </p>
5397              </td>
5398<td>
5399                <p>
5400                  <code class="computeroutput"><span class="keyword">true</span></code>
5401                </p>
5402              </td>
5403</tr>
5404<tr>
5405<td>
5406                <p>
5407                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5408                  <span class="keyword">const</span></code>
5409                </p>
5410              </td>
5411<td>
5412                <p>
5413                  <code class="computeroutput"><span class="keyword">false</span></code>
5414                </p>
5415              </td>
5416</tr>
5417<tr>
5418<td>
5419                <p>
5420                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5421                  <span class="keyword">volatile</span></code>
5422                </p>
5423              </td>
5424<td>
5425                <p>
5426                  <code class="computeroutput"><span class="keyword">false</span></code>
5427                </p>
5428              </td>
5429</tr>
5430<tr>
5431<td>
5432                <p>
5433                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
5434                  <span class="keyword">const</span></code>
5435                </p>
5436              </td>
5437<td>
5438                <p>
5439                  <code class="computeroutput"><span class="keyword">false</span></code>
5440                </p>
5441              </td>
5442</tr>
5443<tr>
5444<td>
5445                <p>
5446                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5447                  <span class="keyword">const</span></code>
5448                </p>
5449              </td>
5450<td>
5451                <p>
5452                  <code class="computeroutput"><span class="keyword">false</span></code>
5453                </p>
5454              </td>
5455</tr>
5456<tr>
5457<td>
5458                <p>
5459                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5460                  <span class="keyword">volatile</span></code>
5461                </p>
5462              </td>
5463<td>
5464                <p>
5465                  <code class="computeroutput"><span class="keyword">false</span></code>
5466                </p>
5467              </td>
5468</tr>
5469<tr>
5470<td>
5471                <p>
5472                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span></code>
5473                </p>
5474              </td>
5475<td>
5476                <p>
5477                  <code class="computeroutput"><span class="keyword">false</span></code>
5478                </p>
5479              </td>
5480</tr>
5481<tr>
5482<td>
5483                <p>
5484                  <code class="computeroutput"><span class="keyword">int</span></code>
5485                </p>
5486              </td>
5487<td>
5488                <p>
5489                  <code class="computeroutput"><span class="keyword">false</span></code>
5490                </p>
5491              </td>
5492</tr>
5493<tr>
5494<td>
5495                <p>
5496                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
5497                </p>
5498              </td>
5499<td>
5500                <p>
5501                  <code class="computeroutput"><span class="keyword">false</span></code>
5502                </p>
5503              </td>
5504</tr>
5505<tr>
5506<td>
5507                <p>
5508                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">int</span>
5509                  <span class="identifier">foo</span><span class="special">::*</span></code>
5510                </p>
5511              </td>
5512<td>
5513                <p>
5514                  <code class="computeroutput"><span class="keyword">false</span></code>
5515                </p>
5516              </td>
5517</tr>
5518</tbody>
5519</table></div>
5520<h5>
5521<a name="callable_traits.reference.ref_is_reference_member.h5"></a>
5522        <span class="phrase"><a name="callable_traits.reference.ref_is_reference_member.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_reference_member.example_program">Example
5523        Program</a>
5524      </h5>
5525<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
5526<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_reference_member</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5527
5528<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
5529
5530<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()&amp;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5531<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()&amp;&amp;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5532<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5533
5534<span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">;</span>
5535
5536<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&amp;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5537<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&amp;&amp;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5538<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5539
5540<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
5541</pre>
5542</div>
5543<div class="section">
5544<div class="titlepage"><div><div><h3 class="title">
5545<a name="callable_traits.reference.ref_is_rvalue_reference_member"></a><a class="link" href="reference.html#callable_traits.reference.ref_is_rvalue_reference_member" title="is_rvalue_reference_member">is_rvalue_reference_member</a>
5546</h3></div></div></div>
5547<h5>
5548<a name="callable_traits.reference.ref_is_rvalue_reference_member.h0"></a>
5549        <span class="phrase"><a name="callable_traits.reference.ref_is_rvalue_reference_member.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_rvalue_reference_member.header">Header</a>
5550      </h5>
5551<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_rvalue_reference_member</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
5552<h5>
5553<a name="callable_traits.reference.ref_is_rvalue_reference_member.h1"></a>
5554        <span class="phrase"><a name="callable_traits.reference.ref_is_rvalue_reference_member.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_rvalue_reference_member.definition">Definition</a>
5555      </h5>
5556<pre class="programlisting"><span class="comment">// inherits from either std::true_type or std::false_type</span>
5557<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
5558<span class="keyword">struct</span> <span class="identifier">is_rvalue_reference_member</span><span class="special">;</span>
5559
5560<span class="comment">// only available when variable templates are supported</span>
5561<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
5562<span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="identifier">is_rvalue_reference_member_v</span> <span class="special">=</span> <span class="comment">//see below</span>
5563</pre>
5564<h5>
5565<a name="callable_traits.reference.ref_is_rvalue_reference_member.h2"></a>
5566        <span class="phrase"><a name="callable_traits.reference.ref_is_rvalue_reference_member.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_rvalue_reference_member.constraints">Constraints</a>
5567      </h5>
5568<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
5569            none
5570          </li></ul></div>
5571<h5>
5572<a name="callable_traits.reference.ref_is_rvalue_reference_member.h3"></a>
5573        <span class="phrase"><a name="callable_traits.reference.ref_is_rvalue_reference_member.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_rvalue_reference_member.behavior">Behavior</a>
5574      </h5>
5575<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5576<li class="listitem">
5577            <code class="computeroutput"><span class="identifier">is_rvalue_reference_member</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code>
5578            is <code class="computeroutput"><span class="keyword">true</span></code> when either:
5579            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
5580<li class="listitem">
5581                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
5582                  type with a '&amp;&amp;' member qualifier
5583                </li>
5584<li class="listitem">
5585                  <code class="computeroutput"><span class="identifier">T</span></code> is a pointer
5586                  to a member function with a '&amp;&amp;' member qualifiers
5587                </li>
5588<li class="listitem">
5589                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
5590                  object with a non-overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>, where the <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code> has a '&amp;&amp;' member qualifier
5591                </li>
5592</ul></div>
5593          </li>
5594<li class="listitem">
5595            On compilers that support variable templates, <code class="computeroutput"><span class="identifier">is_rvalue_reference_member_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_rvalue_reference_member</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code>.
5596          </li>
5597</ul></div>
5598<h5>
5599<a name="callable_traits.reference.ref_is_rvalue_reference_member.h4"></a>
5600        <span class="phrase"><a name="callable_traits.reference.ref_is_rvalue_reference_member.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_rvalue_reference_member.input_output_examples">Input/Output
5601        Examples</a>
5602      </h5>
5603<div class="informaltable"><table class="table">
5604<colgroup>
5605<col>
5606<col>
5607</colgroup>
5608<thead><tr>
5609<th>
5610                <p>
5611                  <code class="computeroutput"><span class="identifier">T</span></code>
5612                </p>
5613              </th>
5614<th>
5615                <p>
5616                  <code class="computeroutput"><span class="identifier">is_rvalue_reference_member_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
5617                </p>
5618              </th>
5619</tr></thead>
5620<tbody>
5621<tr>
5622<td>
5623                <p>
5624                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5625                  <span class="keyword">const</span> <span class="special">&amp;&amp;</span></code>
5626                </p>
5627              </td>
5628<td>
5629                <p>
5630                  <code class="computeroutput"><span class="keyword">true</span></code>
5631                </p>
5632              </td>
5633</tr>
5634<tr>
5635<td>
5636                <p>
5637                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
5638                  <span class="special">&amp;&amp;</span></code>
5639                </p>
5640              </td>
5641<td>
5642                <p>
5643                  <code class="computeroutput"><span class="keyword">true</span></code>
5644                </p>
5645              </td>
5646</tr>
5647<tr>
5648<td>
5649                <p>
5650                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5651                  <span class="keyword">const</span></code>
5652                </p>
5653              </td>
5654<td>
5655                <p>
5656                  <code class="computeroutput"><span class="keyword">false</span></code>
5657                </p>
5658              </td>
5659</tr>
5660<tr>
5661<td>
5662                <p>
5663                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5664                  <span class="keyword">volatile</span></code>
5665                </p>
5666              </td>
5667<td>
5668                <p>
5669                  <code class="computeroutput"><span class="keyword">false</span></code>
5670                </p>
5671              </td>
5672</tr>
5673<tr>
5674<td>
5675                <p>
5676                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
5677                  <span class="keyword">volatile</span><span class="special">)()</span>
5678                  <span class="keyword">const</span></code>
5679                </p>
5680              </td>
5681<td>
5682                <p>
5683                  <code class="computeroutput"><span class="keyword">false</span></code>
5684                </p>
5685              </td>
5686</tr>
5687<tr>
5688<td>
5689                <p>
5690                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5691                  <span class="keyword">const</span></code>
5692                </p>
5693              </td>
5694<td>
5695                <p>
5696                  <code class="computeroutput"><span class="keyword">false</span></code>
5697                </p>
5698              </td>
5699</tr>
5700<tr>
5701<td>
5702                <p>
5703                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5704                  <span class="keyword">volatile</span></code>
5705                </p>
5706              </td>
5707<td>
5708                <p>
5709                  <code class="computeroutput"><span class="keyword">false</span></code>
5710                </p>
5711              </td>
5712</tr>
5713<tr>
5714<td>
5715                <p>
5716                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5717                  <span class="special">&amp;</span></code>
5718                </p>
5719              </td>
5720<td>
5721                <p>
5722                  <code class="computeroutput"><span class="keyword">false</span></code>
5723                </p>
5724              </td>
5725</tr>
5726<tr>
5727<td>
5728                <p>
5729                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span></code>
5730                </p>
5731              </td>
5732<td>
5733                <p>
5734                  <code class="computeroutput"><span class="keyword">false</span></code>
5735                </p>
5736              </td>
5737</tr>
5738<tr>
5739<td>
5740                <p>
5741                  <code class="computeroutput"><span class="keyword">int</span></code>
5742                </p>
5743              </td>
5744<td>
5745                <p>
5746                  <code class="computeroutput"><span class="keyword">false</span></code>
5747                </p>
5748              </td>
5749</tr>
5750<tr>
5751<td>
5752                <p>
5753                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
5754                </p>
5755              </td>
5756<td>
5757                <p>
5758                  <code class="computeroutput"><span class="keyword">false</span></code>
5759                </p>
5760              </td>
5761</tr>
5762<tr>
5763<td>
5764                <p>
5765                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">int</span>
5766                  <span class="identifier">foo</span><span class="special">::*</span></code>
5767                </p>
5768              </td>
5769<td>
5770                <p>
5771                  <code class="computeroutput"><span class="keyword">false</span></code>
5772                </p>
5773              </td>
5774</tr>
5775</tbody>
5776</table></div>
5777<h5>
5778<a name="callable_traits.reference.ref_is_rvalue_reference_member.h5"></a>
5779        <span class="phrase"><a name="callable_traits.reference.ref_is_rvalue_reference_member.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_rvalue_reference_member.example_program">Example
5780        Program</a>
5781      </h5>
5782<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
5783<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_rvalue_reference_member</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5784
5785<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
5786
5787<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_rvalue_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()&amp;&amp;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5788<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_rvalue_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()&amp;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5789<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_rvalue_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5790
5791<span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">;</span>
5792
5793<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_rvalue_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&amp;&amp;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5794<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_rvalue_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&amp;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5795<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_rvalue_reference_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
5796
5797<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
5798</pre>
5799</div>
5800<div class="section">
5801<div class="titlepage"><div><div><h3 class="title">
5802<a name="callable_traits.reference.ref_is_noexcept"></a><a class="link" href="reference.html#callable_traits.reference.ref_is_noexcept" title="is_noexcept">is_noexcept</a>
5803</h3></div></div></div>
5804<h5>
5805<a name="callable_traits.reference.ref_is_noexcept.h0"></a>
5806        <span class="phrase"><a name="callable_traits.reference.ref_is_noexcept.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_noexcept.header">Header</a>
5807      </h5>
5808<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_noexcept</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
5809<h5>
5810<a name="callable_traits.reference.ref_is_noexcept.h1"></a>
5811        <span class="phrase"><a name="callable_traits.reference.ref_is_noexcept.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_noexcept.definition">Definition</a>
5812      </h5>
5813<pre class="programlisting"><span class="comment">// inherits from either std::true_type or std::false_type</span>
5814<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
5815<span class="keyword">struct</span> <span class="identifier">is_noexcept</span><span class="special">;</span>
5816
5817<span class="comment">// only available when variable templates are supported</span>
5818<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
5819<span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="identifier">is_noexcept_v</span> <span class="special">=</span> <span class="comment">//see below</span>
5820</pre>
5821<h5>
5822<a name="callable_traits.reference.ref_is_noexcept.h2"></a>
5823        <span class="phrase"><a name="callable_traits.reference.ref_is_noexcept.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_noexcept.constraints">Constraints</a>
5824      </h5>
5825<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5826<li class="listitem">
5827            none
5828          </li>
5829<li class="listitem"><h5>
5830<a name="callable_traits.reference.ref_is_noexcept.h3"></a>
5831            <span class="phrase"><a name="callable_traits.reference.ref_is_noexcept.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_noexcept.behavior">Behavior</a>
5832          </h5></li>
5833<li class="listitem">
5834            <code class="computeroutput"><span class="identifier">is_noexcept</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code> is <code class="computeroutput"><span class="keyword">true</span></code>
5835            when either:
5836            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
5837<li class="listitem">
5838                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
5839                  type, function pointer type, function reference type, or member
5840                  function pointer type where the function has a <code class="computeroutput"><span class="keyword">noexcept</span></code>
5841                  specifier
5842                </li>
5843<li class="listitem">
5844                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
5845                  object with a non-overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>, where the <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code> has a <code class="computeroutput"><span class="keyword">noexcept</span></code>
5846                  specifier
5847                </li>
5848</ul></div>
5849          </li>
5850<li class="listitem">
5851            On compilers that support variable templates, <code class="computeroutput"><span class="identifier">is_noexcept_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_noexcept</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code>.
5852          </li>
5853</ul></div>
5854<h5>
5855<a name="callable_traits.reference.ref_is_noexcept.h4"></a>
5856        <span class="phrase"><a name="callable_traits.reference.ref_is_noexcept.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_noexcept.input_output_examples">Input/Output
5857        Examples</a>
5858      </h5>
5859<div class="informaltable"><table class="table">
5860<colgroup>
5861<col>
5862<col>
5863</colgroup>
5864<thead><tr>
5865<th>
5866                <p>
5867                  <code class="computeroutput"><span class="identifier">T</span></code>
5868                </p>
5869              </th>
5870<th>
5871                <p>
5872                  <code class="computeroutput"><span class="identifier">is_noexcept_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
5873                </p>
5874              </th>
5875</tr></thead>
5876<tbody>
5877<tr>
5878<td>
5879                <p>
5880                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5881                  <span class="keyword">const</span> <span class="keyword">noexcept</span></code>
5882                </p>
5883              </td>
5884<td>
5885                <p>
5886                  <code class="computeroutput"><span class="keyword">true</span></code>
5887                </p>
5888              </td>
5889</tr>
5890<tr>
5891<td>
5892                <p>
5893                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*</span>
5894                  <span class="keyword">const</span> <span class="special">&amp;)()</span>
5895                  <span class="keyword">noexcept</span></code>
5896                </p>
5897              </td>
5898<td>
5899                <p>
5900                  <code class="computeroutput"><span class="keyword">true</span></code>
5901                </p>
5902              </td>
5903</tr>
5904<tr>
5905<td>
5906                <p>
5907                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(&amp;)()</span>
5908                  <span class="keyword">noexcept</span></code>
5909                </p>
5910              </td>
5911<td>
5912                <p>
5913                  <code class="computeroutput"><span class="keyword">true</span></code>
5914                </p>
5915              </td>
5916</tr>
5917<tr>
5918<td>
5919                <p>
5920                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
5921                  <span class="keyword">noexcept</span></code>
5922                </p>
5923              </td>
5924<td>
5925                <p>
5926                  <code class="computeroutput"><span class="keyword">true</span></code>
5927                </p>
5928              </td>
5929</tr>
5930<tr>
5931<td>
5932                <p>
5933                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5934                  <span class="keyword">const</span></code>
5935                </p>
5936              </td>
5937<td>
5938                <p>
5939                  <code class="computeroutput"><span class="keyword">false</span></code>
5940                </p>
5941              </td>
5942</tr>
5943<tr>
5944<td>
5945                <p>
5946                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5947                  <span class="keyword">volatile</span></code>
5948                </p>
5949              </td>
5950<td>
5951                <p>
5952                  <code class="computeroutput"><span class="keyword">false</span></code>
5953                </p>
5954              </td>
5955</tr>
5956<tr>
5957<td>
5958                <p>
5959                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
5960                  <span class="keyword">const</span></code>
5961                </p>
5962              </td>
5963<td>
5964                <p>
5965                  <code class="computeroutput"><span class="keyword">false</span></code>
5966                </p>
5967              </td>
5968</tr>
5969<tr>
5970<td>
5971                <p>
5972                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5973                  <span class="keyword">const</span></code>
5974                </p>
5975              </td>
5976<td>
5977                <p>
5978                  <code class="computeroutput"><span class="keyword">false</span></code>
5979                </p>
5980              </td>
5981</tr>
5982<tr>
5983<td>
5984                <p>
5985                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5986                  <span class="keyword">volatile</span></code>
5987                </p>
5988              </td>
5989<td>
5990                <p>
5991                  <code class="computeroutput"><span class="keyword">false</span></code>
5992                </p>
5993              </td>
5994</tr>
5995<tr>
5996<td>
5997                <p>
5998                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
5999                  <span class="special">&amp;</span></code>
6000                </p>
6001              </td>
6002<td>
6003                <p>
6004                  <code class="computeroutput"><span class="keyword">false</span></code>
6005                </p>
6006              </td>
6007</tr>
6008<tr>
6009<td>
6010                <p>
6011                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span></code>
6012                </p>
6013              </td>
6014<td>
6015                <p>
6016                  <code class="computeroutput"><span class="keyword">false</span></code>
6017                </p>
6018              </td>
6019</tr>
6020<tr>
6021<td>
6022                <p>
6023                  <code class="computeroutput"><span class="keyword">int</span></code>
6024                </p>
6025              </td>
6026<td>
6027                <p>
6028                  <code class="computeroutput"><span class="keyword">false</span></code>
6029                </p>
6030              </td>
6031</tr>
6032<tr>
6033<td>
6034                <p>
6035                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
6036                </p>
6037              </td>
6038<td>
6039                <p>
6040                  <code class="computeroutput"><span class="keyword">false</span></code>
6041                </p>
6042              </td>
6043</tr>
6044<tr>
6045<td>
6046                <p>
6047                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">int</span>
6048                  <span class="identifier">foo</span><span class="special">::*</span></code>
6049                </p>
6050              </td>
6051<td>
6052                <p>
6053                  <code class="computeroutput"><span class="keyword">false</span></code>
6054                </p>
6055              </td>
6056</tr>
6057</tbody>
6058</table></div>
6059<h5>
6060<a name="callable_traits.reference.ref_is_noexcept.h5"></a>
6061        <span class="phrase"><a name="callable_traits.reference.ref_is_noexcept.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_noexcept.example_program">Example
6062        Program</a>
6063      </h5>
6064<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_noexcept</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6065
6066<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
6067
6068<span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">;</span>
6069
6070<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_noexcept</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6071<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_noexcept</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(*)()</span> <span class="keyword">noexcept</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6072<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_noexcept</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(&amp;)()</span> <span class="keyword">noexcept</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6073<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_noexcept</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6074
6075<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_noexcept</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6076<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_noexcept</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(*)()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6077<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_noexcept</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(&amp;)()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6078<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_noexcept</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6079
6080<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
6081</pre>
6082</div>
6083<div class="section">
6084<div class="titlepage"><div><div><h3 class="title">
6085<a name="callable_traits.reference.ref_is_transaction_safe"></a><a class="link" href="reference.html#callable_traits.reference.ref_is_transaction_safe" title="is_transaction_safe">is_transaction_safe</a>
6086</h3></div></div></div>
6087<h5>
6088<a name="callable_traits.reference.ref_is_transaction_safe.h0"></a>
6089        <span class="phrase"><a name="callable_traits.reference.ref_is_transaction_safe.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_transaction_safe.header">Header</a>
6090      </h5>
6091<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_transaction_safe</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
6092<h5>
6093<a name="callable_traits.reference.ref_is_transaction_safe.h1"></a>
6094        <span class="phrase"><a name="callable_traits.reference.ref_is_transaction_safe.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_transaction_safe.definition">Definition</a>
6095      </h5>
6096<pre class="programlisting"><span class="comment">// inherits from either std::true_type or std::false_type</span>
6097<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
6098<span class="keyword">struct</span> <span class="identifier">is_transaction_safe</span><span class="special">;</span>
6099
6100<span class="comment">// only available when variable templates are supported</span>
6101<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
6102<span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="identifier">is_transaction_safe_v</span> <span class="special">=</span> <span class="comment">//see below</span>
6103</pre>
6104<h5>
6105<a name="callable_traits.reference.ref_is_transaction_safe.h2"></a>
6106        <span class="phrase"><a name="callable_traits.reference.ref_is_transaction_safe.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_transaction_safe.constraints">Constraints</a>
6107      </h5>
6108<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
6109<li class="listitem">
6110            none
6111          </li>
6112<li class="listitem"><h5>
6113<a name="callable_traits.reference.ref_is_transaction_safe.h3"></a>
6114            <span class="phrase"><a name="callable_traits.reference.ref_is_transaction_safe.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_transaction_safe.behavior">Behavior</a>
6115          </h5></li>
6116<li class="listitem">
6117            <code class="computeroutput"><span class="identifier">is_transaction_safe</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code> is <code class="computeroutput"><span class="keyword">true</span></code>
6118            when either:
6119            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
6120<li class="listitem">
6121                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
6122                  type, function pointer type, function reference type, or member
6123                  function pointer type where the function has a <code class="computeroutput"><span class="identifier">transaction_safe</span></code>
6124                  specifier
6125                </li>
6126<li class="listitem">
6127                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
6128                  object with a non-overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>, where the <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code> has a <code class="computeroutput"><span class="identifier">transaction_safe</span></code>
6129                  specifier
6130                </li>
6131</ul></div>
6132          </li>
6133<li class="listitem">
6134            On compilers that support variable templates, <code class="computeroutput"><span class="identifier">is_transaction_safe_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_transaction_safe</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code>.
6135          </li>
6136</ul></div>
6137<h5>
6138<a name="callable_traits.reference.ref_is_transaction_safe.h4"></a>
6139        <span class="phrase"><a name="callable_traits.reference.ref_is_transaction_safe.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_transaction_safe.input_output_examples">Input/Output
6140        Examples</a>
6141      </h5>
6142<div class="informaltable"><table class="table">
6143<colgroup>
6144<col>
6145<col>
6146</colgroup>
6147<thead><tr>
6148<th>
6149                <p>
6150                  <code class="computeroutput"><span class="identifier">T</span></code>
6151                </p>
6152              </th>
6153<th>
6154                <p>
6155                  <code class="computeroutput"><span class="identifier">is_transaction_safe_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
6156                </p>
6157              </th>
6158</tr></thead>
6159<tbody>
6160<tr>
6161<td>
6162                <p>
6163                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
6164                  <span class="keyword">const</span> <span class="identifier">transaction_safe</span></code>
6165                </p>
6166              </td>
6167<td>
6168                <p>
6169                  <code class="computeroutput"><span class="keyword">true</span></code>
6170                </p>
6171              </td>
6172</tr>
6173<tr>
6174<td>
6175                <p>
6176                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span>
6177                  <span class="identifier">transaction_safe</span></code>
6178                </p>
6179              </td>
6180<td>
6181                <p>
6182                  <code class="computeroutput"><span class="keyword">true</span></code>
6183                </p>
6184              </td>
6185</tr>
6186<tr>
6187<td>
6188                <p>
6189                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(&amp;)()</span>
6190                  <span class="identifier">transaction_safe</span></code>
6191                </p>
6192              </td>
6193<td>
6194                <p>
6195                  <code class="computeroutput"><span class="keyword">true</span></code>
6196                </p>
6197              </td>
6198</tr>
6199<tr>
6200<td>
6201                <p>
6202                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
6203                  <span class="keyword">const</span><span class="special">)()</span>
6204                  <span class="identifier">transaction_safe</span></code>
6205                </p>
6206              </td>
6207<td>
6208                <p>
6209                  <code class="computeroutput"><span class="keyword">true</span></code>
6210                </p>
6211              </td>
6212</tr>
6213<tr>
6214<td>
6215                <p>
6216                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
6217                  <span class="keyword">const</span></code>
6218                </p>
6219              </td>
6220<td>
6221                <p>
6222                  <code class="computeroutput"><span class="keyword">false</span></code>
6223                </p>
6224              </td>
6225</tr>
6226<tr>
6227<td>
6228                <p>
6229                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
6230                  <span class="keyword">volatile</span></code>
6231                </p>
6232              </td>
6233<td>
6234                <p>
6235                  <code class="computeroutput"><span class="keyword">false</span></code>
6236                </p>
6237              </td>
6238</tr>
6239<tr>
6240<td>
6241                <p>
6242                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
6243                  <span class="keyword">const</span></code>
6244                </p>
6245              </td>
6246<td>
6247                <p>
6248                  <code class="computeroutput"><span class="keyword">false</span></code>
6249                </p>
6250              </td>
6251</tr>
6252<tr>
6253<td>
6254                <p>
6255                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
6256                  <span class="keyword">const</span></code>
6257                </p>
6258              </td>
6259<td>
6260                <p>
6261                  <code class="computeroutput"><span class="keyword">false</span></code>
6262                </p>
6263              </td>
6264</tr>
6265<tr>
6266<td>
6267                <p>
6268                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
6269                  <span class="keyword">volatile</span></code>
6270                </p>
6271              </td>
6272<td>
6273                <p>
6274                  <code class="computeroutput"><span class="keyword">false</span></code>
6275                </p>
6276              </td>
6277</tr>
6278<tr>
6279<td>
6280                <p>
6281                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
6282                  <span class="special">&amp;</span></code>
6283                </p>
6284              </td>
6285<td>
6286                <p>
6287                  <code class="computeroutput"><span class="keyword">false</span></code>
6288                </p>
6289              </td>
6290</tr>
6291<tr>
6292<td>
6293                <p>
6294                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span></code>
6295                </p>
6296              </td>
6297<td>
6298                <p>
6299                  <code class="computeroutput"><span class="keyword">false</span></code>
6300                </p>
6301              </td>
6302</tr>
6303<tr>
6304<td>
6305                <p>
6306                  <code class="computeroutput"><span class="keyword">int</span></code>
6307                </p>
6308              </td>
6309<td>
6310                <p>
6311                  <code class="computeroutput"><span class="keyword">false</span></code>
6312                </p>
6313              </td>
6314</tr>
6315<tr>
6316<td>
6317                <p>
6318                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
6319                </p>
6320              </td>
6321<td>
6322                <p>
6323                  <code class="computeroutput"><span class="keyword">false</span></code>
6324                </p>
6325              </td>
6326</tr>
6327<tr>
6328<td>
6329                <p>
6330                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">int</span>
6331                  <span class="identifier">foo</span><span class="special">::*</span></code>
6332                </p>
6333              </td>
6334<td>
6335                <p>
6336                  <code class="computeroutput"><span class="keyword">false</span></code>
6337                </p>
6338              </td>
6339</tr>
6340</tbody>
6341</table></div>
6342<h5>
6343<a name="callable_traits.reference.ref_is_transaction_safe.h5"></a>
6344        <span class="phrase"><a name="callable_traits.reference.ref_is_transaction_safe.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_transaction_safe.example_program">Example
6345        Program</a>
6346      </h5>
6347<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_transaction_safe</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6348
6349<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
6350
6351<span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">;</span>
6352
6353<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_transaction_safe</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()</span> <span class="identifier">transaction_safe</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6354<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_transaction_safe</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(*)()</span> <span class="identifier">transaction_safe</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6355<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_transaction_safe</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(&amp;)()</span> <span class="identifier">transaction_safe</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6356<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_transaction_safe</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="identifier">transaction_safe</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6357
6358<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_transaction_safe</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6359<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_transaction_safe</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(*)()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6360<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_transaction_safe</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(&amp;)()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6361<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_transaction_safe</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6362
6363<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
6364</pre>
6365</div>
6366<div class="section">
6367<div class="titlepage"><div><div><h3 class="title">
6368<a name="callable_traits.reference.ref_is_volatile_member"></a><a class="link" href="reference.html#callable_traits.reference.ref_is_volatile_member" title="is_volatile_member">is_volatile_member</a>
6369</h3></div></div></div>
6370<h5>
6371<a name="callable_traits.reference.ref_is_volatile_member.h0"></a>
6372        <span class="phrase"><a name="callable_traits.reference.ref_is_volatile_member.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_volatile_member.header">Header</a>
6373      </h5>
6374<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_volatile_member</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
6375<h5>
6376<a name="callable_traits.reference.ref_is_volatile_member.h1"></a>
6377        <span class="phrase"><a name="callable_traits.reference.ref_is_volatile_member.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_volatile_member.definition">Definition</a>
6378      </h5>
6379<pre class="programlisting"><span class="comment">// inherits from either std::true_type or std::false_type</span>
6380<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
6381<span class="keyword">struct</span> <span class="identifier">is_volatile_member</span><span class="special">;</span>
6382
6383<span class="comment">// only available when variable templates are supported</span>
6384<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
6385<span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="identifier">is_volatile_member_v</span> <span class="special">=</span> <span class="comment">//see below</span>
6386</pre>
6387<h5>
6388<a name="callable_traits.reference.ref_is_volatile_member.h2"></a>
6389        <span class="phrase"><a name="callable_traits.reference.ref_is_volatile_member.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_volatile_member.constraints">Constraints</a>
6390      </h5>
6391<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
6392            none
6393          </li></ul></div>
6394<h5>
6395<a name="callable_traits.reference.ref_is_volatile_member.h3"></a>
6396        <span class="phrase"><a name="callable_traits.reference.ref_is_volatile_member.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_volatile_member.behavior">Behavior</a>
6397      </h5>
6398<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
6399<li class="listitem">
6400            <code class="computeroutput"><span class="identifier">is_volatile_member</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code> is <code class="computeroutput"><span class="keyword">true</span></code>
6401            when either:
6402            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
6403<li class="listitem">
6404                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
6405                  type with a <code class="computeroutput"><span class="keyword">volatile</span></code>
6406                  member qualifier
6407                </li>
6408<li class="listitem">
6409                  <code class="computeroutput"><span class="identifier">T</span></code> is a pointer
6410                  to a member function with a <code class="computeroutput"><span class="keyword">volatile</span></code>
6411                  member qualifier
6412                </li>
6413<li class="listitem">
6414                  <code class="computeroutput"><span class="identifier">T</span></code> is a function
6415                  object with a non-overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>, where the <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code> has a <code class="computeroutput"><span class="keyword">volatile</span></code>
6416                  member qualifier
6417                </li>
6418</ul></div>
6419          </li>
6420<li class="listitem">
6421            On compilers that support variable templates, <code class="computeroutput"><span class="identifier">is_volatile_member_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_volatile_member</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span></code>.
6422          </li>
6423</ul></div>
6424<h5>
6425<a name="callable_traits.reference.ref_is_volatile_member.h4"></a>
6426        <span class="phrase"><a name="callable_traits.reference.ref_is_volatile_member.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_volatile_member.input_output_examples">Input/Output
6427        Examples</a>
6428      </h5>
6429<div class="informaltable"><table class="table">
6430<colgroup>
6431<col>
6432<col>
6433</colgroup>
6434<thead><tr>
6435<th>
6436                <p>
6437                  <code class="computeroutput"><span class="identifier">T</span></code>
6438                </p>
6439              </th>
6440<th>
6441                <p>
6442                  <code class="computeroutput"><span class="identifier">is_volatile_member_v</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
6443                </p>
6444              </th>
6445</tr></thead>
6446<tbody>
6447<tr>
6448<td>
6449                <p>
6450                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
6451                  <span class="keyword">volatile</span></code>
6452                </p>
6453              </td>
6454<td>
6455                <p>
6456                  <code class="computeroutput"><span class="keyword">true</span></code>
6457                </p>
6458              </td>
6459</tr>
6460<tr>
6461<td>
6462                <p>
6463                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
6464                  <span class="keyword">const</span> <span class="keyword">volatile</span></code>
6465                </p>
6466              </td>
6467<td>
6468                <p>
6469                  <code class="computeroutput"><span class="keyword">true</span></code>
6470                </p>
6471              </td>
6472</tr>
6473<tr>
6474<td>
6475                <p>
6476                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
6477                  <span class="keyword">volatile</span> <span class="special">&amp;&amp;</span></code>
6478                </p>
6479              </td>
6480<td>
6481                <p>
6482                  <code class="computeroutput"><span class="keyword">true</span></code>
6483                </p>
6484              </td>
6485</tr>
6486<tr>
6487<td>
6488                <p>
6489                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
6490                  <span class="keyword">volatile</span></code>
6491                </p>
6492              </td>
6493<td>
6494                <p>
6495                  <code class="computeroutput"><span class="keyword">true</span></code>
6496                </p>
6497              </td>
6498</tr>
6499<tr>
6500<td>
6501                <p>
6502                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
6503                  <span class="keyword">const</span><span class="special">)()</span>
6504                  <span class="keyword">volatile</span></code>
6505                </p>
6506              </td>
6507<td>
6508                <p>
6509                  <code class="computeroutput"><span class="keyword">true</span></code>
6510                </p>
6511              </td>
6512</tr>
6513<tr>
6514<td>
6515                <p>
6516                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
6517                  <span class="keyword">const</span> <span class="keyword">volatile</span></code>
6518                </p>
6519              </td>
6520<td>
6521                <p>
6522                  <code class="computeroutput"><span class="keyword">true</span></code>
6523                </p>
6524              </td>
6525</tr>
6526<tr>
6527<td>
6528                <p>
6529                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
6530                  <span class="keyword">const</span> <span class="keyword">volatile</span>
6531                  <span class="special">&amp;&amp;</span></code>
6532                </p>
6533              </td>
6534<td>
6535                <p>
6536                  <code class="computeroutput"><span class="keyword">true</span></code>
6537                </p>
6538              </td>
6539</tr>
6540<tr>
6541<td>
6542                <p>
6543                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
6544                </p>
6545              </td>
6546<td>
6547                <p>
6548                  <code class="computeroutput"><span class="keyword">false</span></code>
6549                </p>
6550              </td>
6551</tr>
6552<tr>
6553<td>
6554                <p>
6555                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
6556                  <span class="keyword">const</span></code>
6557                </p>
6558              </td>
6559<td>
6560                <p>
6561                  <code class="computeroutput"><span class="keyword">false</span></code>
6562                </p>
6563              </td>
6564</tr>
6565<tr>
6566<td>
6567                <p>
6568                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
6569                  <span class="special">&amp;&amp;</span></code>
6570                </p>
6571              </td>
6572<td>
6573                <p>
6574                  <code class="computeroutput"><span class="keyword">false</span></code>
6575                </p>
6576              </td>
6577</tr>
6578<tr>
6579<td>
6580                <p>
6581                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span></code>
6582                </p>
6583              </td>
6584<td>
6585                <p>
6586                  <code class="computeroutput"><span class="keyword">false</span></code>
6587                </p>
6588              </td>
6589</tr>
6590<tr>
6591<td>
6592                <p>
6593                  <code class="computeroutput"><span class="keyword">int</span></code>
6594                </p>
6595              </td>
6596<td>
6597                <p>
6598                  <code class="computeroutput"><span class="keyword">false</span></code>
6599                </p>
6600              </td>
6601</tr>
6602<tr>
6603<td>
6604                <p>
6605                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
6606                </p>
6607              </td>
6608<td>
6609                <p>
6610                  <code class="computeroutput"><span class="keyword">false</span></code>
6611                </p>
6612              </td>
6613</tr>
6614<tr>
6615<td>
6616                <p>
6617                  <code class="computeroutput"><span class="keyword">volatile</span> <span class="keyword">int</span>
6618                  <span class="identifier">foo</span><span class="special">::*</span></code>
6619                </p>
6620              </td>
6621<td>
6622                <p>
6623                  <code class="computeroutput"><span class="keyword">false</span></code>
6624                </p>
6625              </td>
6626</tr>
6627</tbody>
6628</table></div>
6629<h5>
6630<a name="callable_traits.reference.ref_is_volatile_member.h5"></a>
6631        <span class="phrase"><a name="callable_traits.reference.ref_is_volatile_member.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_is_volatile_member.example_program">Example
6632        Program</a>
6633      </h5>
6634<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
6635<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">is_volatile_member</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6636
6637<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
6638
6639<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_volatile_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()</span> <span class="keyword">volatile</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6640<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_volatile_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">volatile</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6641<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_volatile_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6642
6643<span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">;</span>
6644
6645<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_volatile_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">volatile</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6646<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_volatile_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6647<span class="keyword">static_assert</span><span class="special">(!</span><span class="identifier">ct</span><span class="special">::</span><span class="identifier">is_volatile_member</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6648
6649<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
6650</pre>
6651</div>
6652<div class="section">
6653<div class="titlepage"><div><div><h3 class="title">
6654<a name="callable_traits.reference.ref_qualified_class_of"></a><a class="link" href="reference.html#callable_traits.reference.ref_qualified_class_of" title="qualified_class_of">qualified_class_of</a>
6655</h3></div></div></div>
6656<h5>
6657<a name="callable_traits.reference.ref_qualified_class_of.h0"></a>
6658        <span class="phrase"><a name="callable_traits.reference.ref_qualified_class_of.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_qualified_class_of.header">Header</a>
6659      </h5>
6660<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">qualified_class_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
6661<h5>
6662<a name="callable_traits.reference.ref_qualified_class_of.h1"></a>
6663        <span class="phrase"><a name="callable_traits.reference.ref_qualified_class_of.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_qualified_class_of.definition">Definition</a>
6664      </h5>
6665<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
6666<span class="keyword">using</span> <span class="identifier">qualified_class_of_t</span> <span class="special">=</span> <span class="comment">//see below</span>
6667
6668<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
6669<span class="keyword">struct</span> <span class="identifier">qualified_class_of</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">qualified_class_of_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
6670</pre>
6671<h5>
6672<a name="callable_traits.reference.ref_qualified_class_of.h2"></a>
6673        <span class="phrase"><a name="callable_traits.reference.ref_qualified_class_of.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_qualified_class_of.constraints">Constraints</a>
6674      </h5>
6675<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
6676            <code class="computeroutput"><span class="identifier">T</span></code> must be a member pointer
6677          </li></ul></div>
6678<h5>
6679<a name="callable_traits.reference.ref_qualified_class_of.h3"></a>
6680        <span class="phrase"><a name="callable_traits.reference.ref_qualified_class_of.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_qualified_class_of.behavior">Behavior</a>
6681      </h5>
6682<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
6683<li class="listitem">
6684            A substitution failure occurs if the constraints are violated.
6685          </li>
6686<li class="listitem">
6687            If <code class="computeroutput"><span class="identifier">T</span></code> is a member function
6688            pointer, the aliased type is the parent class of the member, qualified
6689            according to the member qualifiers on <code class="computeroutput"><span class="identifier">T</span></code>.
6690            If <code class="computeroutput"><span class="identifier">T</span></code> does not have a
6691            member reference qualifier, then the aliased type will be an lvalue reference.
6692          </li>
6693<li class="listitem">
6694            If <code class="computeroutput"><span class="identifier">T</span></code> is a member data
6695            pointer, the aliased type is equivalent to <code class="computeroutput"><span class="identifier">ct</span><span class="special">::</span><span class="identifier">class_of</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">const</span> <span class="special">&amp;</span></code>.
6696          </li>
6697</ul></div>
6698<h5>
6699<a name="callable_traits.reference.ref_qualified_class_of.h4"></a>
6700        <span class="phrase"><a name="callable_traits.reference.ref_qualified_class_of.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_qualified_class_of.input_output_examples">Input/Output
6701        Examples</a>
6702      </h5>
6703<div class="informaltable"><table class="table">
6704<colgroup>
6705<col>
6706<col>
6707</colgroup>
6708<thead><tr>
6709<th>
6710                <p>
6711                  <code class="computeroutput"><span class="identifier">T</span></code>
6712                </p>
6713              </th>
6714<th>
6715                <p>
6716                  <code class="computeroutput"><span class="identifier">qualified_class_of_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
6717                </p>
6718              </th>
6719</tr></thead>
6720<tbody>
6721<tr>
6722<td>
6723                <p>
6724                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
6725                </p>
6726              </td>
6727<td>
6728                <p>
6729                  <code class="computeroutput"><span class="identifier">foo</span> <span class="special">&amp;</span></code>
6730                </p>
6731              </td>
6732</tr>
6733<tr>
6734<td>
6735                <p>
6736                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
6737                  <span class="keyword">volatile</span><span class="special">)()</span>
6738                  <span class="keyword">const</span></code>
6739                </p>
6740              </td>
6741<td>
6742                <p>
6743                  <code class="computeroutput"><span class="identifier">foo</span> <span class="keyword">const</span>
6744                  <span class="special">&amp;</span></code>
6745                </p>
6746              </td>
6747</tr>
6748<tr>
6749<td>
6750                <p>
6751                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
6752                  <span class="special">&amp;&amp;</span></code>
6753                </p>
6754              </td>
6755<td>
6756                <p>
6757                  <code class="computeroutput"><span class="identifier">foo</span> <span class="special">&amp;&amp;</span></code>
6758                </p>
6759              </td>
6760</tr>
6761<tr>
6762<td>
6763                <p>
6764                  <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*&amp;)()</span>
6765                  <span class="keyword">volatile</span> <span class="special">&amp;&amp;</span></code>
6766                </p>
6767              </td>
6768<td>
6769                <p>
6770                  <code class="computeroutput"><span class="identifier">foo</span> <span class="keyword">volatile</span>
6771                  <span class="special">&amp;&amp;</span></code>
6772                </p>
6773              </td>
6774</tr>
6775<tr>
6776<td>
6777                <p>
6778                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
6779                </p>
6780              </td>
6781<td>
6782                <p>
6783                  <code class="computeroutput"><span class="identifier">foo</span> <span class="keyword">const</span>
6784                  <span class="special">&amp;</span></code>
6785                </p>
6786              </td>
6787</tr>
6788<tr>
6789<td>
6790                <p>
6791                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">int</span>
6792                  <span class="identifier">foo</span><span class="special">::*</span></code>
6793                </p>
6794              </td>
6795<td>
6796                <p>
6797                  <code class="computeroutput"><span class="identifier">foo</span> <span class="keyword">const</span>
6798                  <span class="special">&amp;</span></code>
6799                </p>
6800              </td>
6801</tr>
6802</tbody>
6803</table></div>
6804<h5>
6805<a name="callable_traits.reference.ref_qualified_class_of.h5"></a>
6806        <span class="phrase"><a name="callable_traits.reference.ref_qualified_class_of.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_qualified_class_of.example_program">Example
6807        Program</a>
6808      </h5>
6809<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
6810<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">qualified_class_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6811
6812<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
6813
6814<span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">;</span>
6815
6816<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">foo</span> <span class="special">&amp;,</span>
6817    <span class="identifier">ct</span><span class="special">::</span><span class="identifier">qualified_class_of_t</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&gt;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6818
6819<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">foo</span> <span class="keyword">const</span> <span class="special">&amp;,</span>
6820    <span class="identifier">ct</span><span class="special">::</span><span class="identifier">qualified_class_of_t</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span><span class="special">&gt;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6821
6822<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">foo</span> <span class="keyword">volatile</span> <span class="special">&amp;&amp;,</span>
6823    <span class="identifier">ct</span><span class="special">::</span><span class="identifier">qualified_class_of_t</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">volatile</span> <span class="special">&amp;&amp;&gt;&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
6824
6825<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
6826</pre>
6827</div>
6828<div class="section">
6829<div class="titlepage"><div><div><h3 class="title">
6830<a name="callable_traits.reference.ref_remove_member_const"></a><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_const" title="remove_member_const">remove_member_const</a>
6831</h3></div></div></div>
6832<h5>
6833<a name="callable_traits.reference.ref_remove_member_const.h0"></a>
6834        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_const.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_const.header">Header</a>
6835      </h5>
6836<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">remove_member_const</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
6837<h5>
6838<a name="callable_traits.reference.ref_remove_member_const.h1"></a>
6839        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_const.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_const.definition">Definition</a>
6840      </h5>
6841<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
6842<span class="keyword">using</span> <span class="identifier">remove_member_const_t</span> <span class="special">=</span> <span class="comment">//see below</span>
6843
6844<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
6845<span class="keyword">struct</span> <span class="identifier">remove_member_const</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">remove_member_const_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
6846</pre>
6847<h5>
6848<a name="callable_traits.reference.ref_remove_member_const.h2"></a>
6849        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_const.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_const.constraints">Constraints</a>
6850      </h5>
6851<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
6852<li class="listitem">
6853            <code class="computeroutput"><span class="identifier">T</span></code> must be a function
6854            type or a member function pointer type
6855          </li>
6856<li class="listitem">
6857            If <code class="computeroutput"><span class="identifier">T</span></code> is a pointer, it
6858            may not be cv/ref qualified
6859          </li>
6860</ul></div>
6861<h5>
6862<a name="callable_traits.reference.ref_remove_member_const.h3"></a>
6863        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_const.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_const.behavior">Behavior</a>
6864      </h5>
6865<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
6866<li class="listitem">
6867            A substitution failure occurs if the constraints are violated.
6868          </li>
6869<li class="listitem">
6870            Removes the member <code class="computeroutput"><span class="keyword">const</span></code>
6871            qualifier from <code class="computeroutput"><span class="identifier">T</span></code>, if
6872            present.
6873          </li>
6874</ul></div>
6875<h5>
6876<a name="callable_traits.reference.ref_remove_member_const.h4"></a>
6877        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_const.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_const.input_output_examples">Input/Output
6878        Examples</a>
6879      </h5>
6880<div class="informaltable"><table class="table">
6881<colgroup>
6882<col>
6883<col>
6884</colgroup>
6885<thead><tr>
6886<th>
6887                <p>
6888                  <code class="computeroutput"><span class="identifier">T</span></code>
6889                </p>
6890              </th>
6891<th>
6892                <p>
6893                  <code class="computeroutput"><span class="identifier">remove_member_const_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
6894                </p>
6895              </th>
6896</tr></thead>
6897<tbody>
6898<tr>
6899<td>
6900                <p>
6901                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
6902                  <span class="keyword">const</span></code>
6903                </p>
6904              </td>
6905<td>
6906                <p>
6907                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
6908                </p>
6909              </td>
6910</tr>
6911<tr>
6912<td>
6913                <p>
6914                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
6915                  <span class="keyword">const</span></code>
6916                </p>
6917              </td>
6918<td>
6919                <p>
6920                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
6921                </p>
6922              </td>
6923</tr>
6924<tr>
6925<td>
6926                <p>
6927                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
6928                  <span class="keyword">const</span> <span class="special">&amp;</span></code>
6929                </p>
6930              </td>
6931<td>
6932                <p>
6933                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
6934                  <span class="special">&amp;</span></code>
6935                </p>
6936              </td>
6937</tr>
6938<tr>
6939<td>
6940                <p>
6941                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
6942                  <span class="keyword">const</span> <span class="special">&amp;&amp;</span></code>
6943                </p>
6944              </td>
6945<td>
6946                <p>
6947                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
6948                  <span class="special">&amp;&amp;</span></code>
6949                </p>
6950              </td>
6951</tr>
6952<tr>
6953<td>
6954                <p>
6955                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
6956                  <span class="keyword">const</span></code>
6957                </p>
6958              </td>
6959<td>
6960                <p>
6961                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
6962                </p>
6963              </td>
6964</tr>
6965<tr>
6966<td>
6967                <p>
6968                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
6969                  <span class="keyword">const</span> <span class="keyword">volatile</span></code>
6970                </p>
6971              </td>
6972<td>
6973                <p>
6974                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
6975                  <span class="keyword">volatile</span></code>
6976                </p>
6977              </td>
6978</tr>
6979<tr>
6980<td>
6981                <p>
6982                  <code class="computeroutput"><span class="keyword">int</span></code>
6983                </p>
6984              </td>
6985<td>
6986                <p>
6987                  (substitution failure)
6988                </p>
6989              </td>
6990</tr>
6991<tr>
6992<td>
6993                <p>
6994                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(&amp;)()</span></code>
6995                </p>
6996              </td>
6997<td>
6998                <p>
6999                  (substitution failure)
7000                </p>
7001              </td>
7002</tr>
7003<tr>
7004<td>
7005                <p>
7006                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)()</span></code>
7007                </p>
7008              </td>
7009<td>
7010                <p>
7011                  (substitution failure)
7012                </p>
7013              </td>
7014</tr>
7015<tr>
7016<td>
7017                <p>
7018                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
7019                </p>
7020              </td>
7021<td>
7022                <p>
7023                  (substitution failure)
7024                </p>
7025              </td>
7026</tr>
7027<tr>
7028<td>
7029                <p>
7030                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
7031                  <span class="keyword">const</span><span class="special">)()</span></code>
7032                </p>
7033              </td>
7034<td>
7035                <p>
7036                  (substitution failure)
7037                </p>
7038              </td>
7039</tr>
7040</tbody>
7041</table></div>
7042<h5>
7043<a name="callable_traits.reference.ref_remove_member_const.h5"></a>
7044        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_const.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_const.example_program">Example
7045        Program</a>
7046      </h5>
7047<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
7048<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">remove_member_const</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7049
7050<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
7051
7052<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">{};</span>
7053
7054<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
7055
7056    <span class="special">{</span>
7057        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span><span class="special">;</span>
7058        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)();</span>
7059        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_member_const_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
7060        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
7061    <span class="special">}</span> <span class="special">{</span>
7062        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="special">&amp;&amp;;</span>
7063        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="special">&amp;&amp;;</span>
7064        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_member_const_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
7065        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
7066    <span class="special">}</span> <span class="special">{</span>
7067        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="special">&amp;;</span>
7068        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">volatile</span> <span class="special">&amp;;</span>
7069        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_member_const_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
7070        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
7071    <span class="special">}</span> <span class="special">{</span>
7072        <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
7073        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">();</span>
7074        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_member_const_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">&gt;;</span>
7075        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
7076    <span class="special">}</span>
7077<span class="special">}</span>
7078</pre>
7079</div>
7080<div class="section">
7081<div class="titlepage"><div><div><h3 class="title">
7082<a name="callable_traits.reference.ref_remove_member_cv"></a><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_cv" title="remove_member_cv">remove_member_cv</a>
7083</h3></div></div></div>
7084<h5>
7085<a name="callable_traits.reference.ref_remove_member_cv.h0"></a>
7086        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_cv.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_cv.header">Header</a>
7087      </h5>
7088<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">remove_member_cv</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
7089<h5>
7090<a name="callable_traits.reference.ref_remove_member_cv.h1"></a>
7091        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_cv.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_cv.definition">Definition</a>
7092      </h5>
7093<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
7094<span class="keyword">using</span> <span class="identifier">remove_member_cv_t</span> <span class="special">=</span> <span class="comment">//see below</span>
7095
7096<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
7097<span class="keyword">struct</span> <span class="identifier">remove_member_cv</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">remove_member_cv_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
7098</pre>
7099<h5>
7100<a name="callable_traits.reference.ref_remove_member_cv.h2"></a>
7101        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_cv.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_cv.constraints">Constraints</a>
7102      </h5>
7103<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7104<li class="listitem">
7105            <code class="computeroutput"><span class="identifier">T</span></code> must be a function
7106            type or a member function pointer type
7107          </li>
7108<li class="listitem">
7109            If <code class="computeroutput"><span class="identifier">T</span></code> is a pointer, it
7110            may not be cv/ref qualified
7111          </li>
7112</ul></div>
7113<h5>
7114<a name="callable_traits.reference.ref_remove_member_cv.h3"></a>
7115        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_cv.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_cv.behavior">Behavior</a>
7116      </h5>
7117<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7118<li class="listitem">
7119            A substitution failure occurs if the constraints are violated.
7120          </li>
7121<li class="listitem">
7122            Removes member <code class="computeroutput"><span class="keyword">const</span></code> and/or
7123            <code class="computeroutput"><span class="keyword">volatile</span></code> qualifiers from
7124            <code class="computeroutput"><span class="identifier">T</span></code>, if present.
7125          </li>
7126</ul></div>
7127<h5>
7128<a name="callable_traits.reference.ref_remove_member_cv.h4"></a>
7129        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_cv.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_cv.input_output_examples">Input/Output
7130        Examples</a>
7131      </h5>
7132<div class="informaltable"><table class="table">
7133<colgroup>
7134<col>
7135<col>
7136</colgroup>
7137<thead><tr>
7138<th>
7139                <p>
7140                  <code class="computeroutput"><span class="identifier">T</span></code>
7141                </p>
7142              </th>
7143<th>
7144                <p>
7145                  <code class="computeroutput"><span class="identifier">remove_member_cv_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
7146                </p>
7147              </th>
7148</tr></thead>
7149<tbody>
7150<tr>
7151<td>
7152                <p>
7153                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
7154                  <span class="keyword">const</span> <span class="keyword">volatile</span></code>
7155                </p>
7156              </td>
7157<td>
7158                <p>
7159                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
7160                </p>
7161              </td>
7162</tr>
7163<tr>
7164<td>
7165                <p>
7166                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7167                  <span class="keyword">const</span> <span class="keyword">volatile</span></code>
7168                </p>
7169              </td>
7170<td>
7171                <p>
7172                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
7173                </p>
7174              </td>
7175</tr>
7176<tr>
7177<td>
7178                <p>
7179                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7180                  <span class="keyword">volatile</span></code>
7181                </p>
7182              </td>
7183<td>
7184                <p>
7185                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
7186                </p>
7187              </td>
7188</tr>
7189<tr>
7190<td>
7191                <p>
7192                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7193                  <span class="keyword">const</span></code>
7194                </p>
7195              </td>
7196<td>
7197                <p>
7198                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
7199                </p>
7200              </td>
7201</tr>
7202<tr>
7203<td>
7204                <p>
7205                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7206                  <span class="keyword">const</span> <span class="special">&amp;</span></code>
7207                </p>
7208              </td>
7209<td>
7210                <p>
7211                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7212                  <span class="special">&amp;</span></code>
7213                </p>
7214              </td>
7215</tr>
7216<tr>
7217<td>
7218                <p>
7219                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7220                  <span class="keyword">const</span> <span class="special">&amp;&amp;</span></code>
7221                </p>
7222              </td>
7223<td>
7224                <p>
7225                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7226                  <span class="special">&amp;&amp;</span></code>
7227                </p>
7228              </td>
7229</tr>
7230<tr>
7231<td>
7232                <p>
7233                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7234                  <span class="keyword">const</span></code>
7235                </p>
7236              </td>
7237<td>
7238                <p>
7239                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
7240                </p>
7241              </td>
7242</tr>
7243<tr>
7244<td>
7245                <p>
7246                  <code class="computeroutput"><span class="keyword">int</span></code>
7247                </p>
7248              </td>
7249<td>
7250                <p>
7251                  (substitution failure)
7252                </p>
7253              </td>
7254</tr>
7255<tr>
7256<td>
7257                <p>
7258                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(&amp;)()</span></code>
7259                </p>
7260              </td>
7261<td>
7262                <p>
7263                  (substitution failure)
7264                </p>
7265              </td>
7266</tr>
7267<tr>
7268<td>
7269                <p>
7270                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)()</span></code>
7271                </p>
7272              </td>
7273<td>
7274                <p>
7275                  (substitution failure)
7276                </p>
7277              </td>
7278</tr>
7279<tr>
7280<td>
7281                <p>
7282                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
7283                </p>
7284              </td>
7285<td>
7286                <p>
7287                  (substitution failure)
7288                </p>
7289              </td>
7290</tr>
7291<tr>
7292<td>
7293                <p>
7294                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
7295                  <span class="keyword">const</span><span class="special">)()</span></code>
7296                </p>
7297              </td>
7298<td>
7299                <p>
7300                  (substitution failure)
7301                </p>
7302              </td>
7303</tr>
7304</tbody>
7305</table></div>
7306<h5>
7307<a name="callable_traits.reference.ref_remove_member_cv.h5"></a>
7308        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_cv.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_cv.example_program">Example
7309        Program</a>
7310      </h5>
7311<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
7312<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">remove_member_cv</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7313
7314<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
7315
7316<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">{};</span>
7317
7318<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
7319
7320    <span class="special">{</span>
7321        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="keyword">volatile</span><span class="special">;</span>
7322        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)();</span>
7323        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_member_cv_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
7324        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
7325    <span class="special">}</span> <span class="special">{</span>
7326        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="special">&amp;&amp;;</span>
7327        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="special">&amp;&amp;;</span>
7328        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_member_cv_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
7329        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
7330    <span class="special">}</span> <span class="special">{</span>
7331        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="special">&amp;;</span>
7332        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="special">&amp;;</span>
7333        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_member_cv_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
7334        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
7335    <span class="special">}</span> <span class="special">{</span>
7336        <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">volatile</span><span class="special">;</span>
7337        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">();</span>
7338        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_member_cv_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">&gt;;</span>
7339        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
7340    <span class="special">}</span>
7341<span class="special">}</span>
7342</pre>
7343</div>
7344<div class="section">
7345<div class="titlepage"><div><div><h3 class="title">
7346<a name="callable_traits.reference.ref_remove_member_reference"></a><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_reference" title="remove_member_reference">remove_member_reference</a>
7347</h3></div></div></div>
7348<h5>
7349<a name="callable_traits.reference.ref_remove_member_reference.h0"></a>
7350        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_reference.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_reference.header">Header</a>
7351      </h5>
7352<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">remove_member_reference</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
7353<h5>
7354<a name="callable_traits.reference.ref_remove_member_reference.h1"></a>
7355        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_reference.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_reference.definition">Definition</a>
7356      </h5>
7357<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
7358<span class="keyword">using</span> <span class="identifier">remove_member_reference_t</span> <span class="special">=</span> <span class="comment">//see below</span>
7359
7360<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
7361<span class="keyword">struct</span> <span class="identifier">remove_member_reference</span>
7362  <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">remove_member_reference_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
7363</pre>
7364<h5>
7365<a name="callable_traits.reference.ref_remove_member_reference.h2"></a>
7366        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_reference.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_reference.constraints">Constraints</a>
7367      </h5>
7368<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7369<li class="listitem">
7370            <code class="computeroutput"><span class="identifier">T</span></code> must be a function
7371            type or a member function pointer type
7372          </li>
7373<li class="listitem">
7374            If <code class="computeroutput"><span class="identifier">T</span></code> is a pointer, it
7375            may not be cv/ref qualified
7376          </li>
7377</ul></div>
7378<h5>
7379<a name="callable_traits.reference.ref_remove_member_reference.h3"></a>
7380        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_reference.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_reference.behavior">Behavior</a>
7381      </h5>
7382<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7383<li class="listitem">
7384            A substitution failure occuers if the constraints are violated.
7385          </li>
7386<li class="listitem">
7387            Removes member <code class="computeroutput"><span class="special">&amp;</span></code> or
7388            <code class="computeroutput"><span class="special">&amp;&amp;</span></code> qualifiers from
7389            <code class="computeroutput"><span class="identifier">T</span></code>, if present.
7390          </li>
7391</ul></div>
7392<h5>
7393<a name="callable_traits.reference.ref_remove_member_reference.h4"></a>
7394        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_reference.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_reference.input_output_examples">Input/Output
7395        Examples</a>
7396      </h5>
7397<div class="informaltable"><table class="table">
7398<colgroup>
7399<col>
7400<col>
7401</colgroup>
7402<thead><tr>
7403<th>
7404                <p>
7405                  <code class="computeroutput"><span class="identifier">T</span></code>
7406                </p>
7407              </th>
7408<th>
7409                <p>
7410                  <code class="computeroutput"><span class="identifier">remove_member_const_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
7411                </p>
7412              </th>
7413</tr></thead>
7414<tbody>
7415<tr>
7416<td>
7417                <p>
7418                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
7419                  <span class="special">&amp;</span></code>
7420                </p>
7421              </td>
7422<td>
7423                <p>
7424                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
7425                </p>
7426              </td>
7427</tr>
7428<tr>
7429<td>
7430                <p>
7431                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7432                  <span class="special">&amp;</span></code>
7433                </p>
7434              </td>
7435<td>
7436                <p>
7437                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
7438                </p>
7439              </td>
7440</tr>
7441<tr>
7442<td>
7443                <p>
7444                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7445                  <span class="keyword">const</span> <span class="special">&amp;</span></code>
7446                </p>
7447              </td>
7448<td>
7449                <p>
7450                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7451                  <span class="keyword">const</span></code>
7452                </p>
7453              </td>
7454</tr>
7455<tr>
7456<td>
7457                <p>
7458                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7459                  <span class="keyword">const</span> <span class="special">&amp;&amp;</span></code>
7460                </p>
7461              </td>
7462<td>
7463                <p>
7464                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7465                  <span class="keyword">const</span></code>
7466                </p>
7467              </td>
7468</tr>
7469<tr>
7470<td>
7471                <p>
7472                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
7473                </p>
7474              </td>
7475<td>
7476                <p>
7477                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
7478                </p>
7479              </td>
7480</tr>
7481<tr>
7482<td>
7483                <p>
7484                  <code class="computeroutput"><span class="keyword">int</span></code>
7485                </p>
7486              </td>
7487<td>
7488                <p>
7489                  (substitution failure)
7490                </p>
7491              </td>
7492</tr>
7493<tr>
7494<td>
7495                <p>
7496                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(&amp;)()</span></code>
7497                </p>
7498              </td>
7499<td>
7500                <p>
7501                  (substitution failure)
7502                </p>
7503              </td>
7504</tr>
7505<tr>
7506<td>
7507                <p>
7508                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)()</span></code>
7509                </p>
7510              </td>
7511<td>
7512                <p>
7513                  (substitution failure)
7514                </p>
7515              </td>
7516</tr>
7517<tr>
7518<td>
7519                <p>
7520                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
7521                </p>
7522              </td>
7523<td>
7524                <p>
7525                  (substitution failure)
7526                </p>
7527              </td>
7528</tr>
7529<tr>
7530<td>
7531                <p>
7532                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
7533                  <span class="keyword">const</span><span class="special">)()</span></code>
7534                </p>
7535              </td>
7536<td>
7537                <p>
7538                  (substitution failure)
7539                </p>
7540              </td>
7541</tr>
7542</tbody>
7543</table></div>
7544<h5>
7545<a name="callable_traits.reference.ref_remove_member_reference.h5"></a>
7546        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_reference.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_reference.example_program">Example
7547        Program</a>
7548      </h5>
7549<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
7550<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">remove_member_reference</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7551
7552<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
7553
7554<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">{};</span>
7555
7556<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
7557
7558    <span class="special">{</span>
7559        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="special">&amp;;</span>
7560        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)();</span>
7561        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_member_reference_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
7562        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
7563    <span class="special">}</span> <span class="special">{</span>
7564        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="special">&amp;&amp;;</span>
7565        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span><span class="special">;</span>
7566        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_member_reference_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
7567        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
7568    <span class="special">}</span> <span class="special">{</span>
7569        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="special">&amp;;</span>
7570        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="keyword">volatile</span><span class="special">;</span>
7571        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_member_reference_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
7572        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
7573    <span class="special">}</span> <span class="special">{</span>
7574        <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">()</span> <span class="special">&amp;&amp;;</span>
7575        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">();</span>
7576        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_member_reference_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">&gt;;</span>
7577        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
7578    <span class="special">}</span>
7579<span class="special">}</span>
7580</pre>
7581</div>
7582<div class="section">
7583<div class="titlepage"><div><div><h3 class="title">
7584<a name="callable_traits.reference.ref_remove_member_volatile"></a><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_volatile" title="remove_member_volatile">remove_member_volatile</a>
7585</h3></div></div></div>
7586<h5>
7587<a name="callable_traits.reference.ref_remove_member_volatile.h0"></a>
7588        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_volatile.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_volatile.header">Header</a>
7589      </h5>
7590<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">remove_member_volatile</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
7591<h5>
7592<a name="callable_traits.reference.ref_remove_member_volatile.h1"></a>
7593        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_volatile.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_volatile.definition">Definition</a>
7594      </h5>
7595<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
7596<span class="keyword">using</span> <span class="identifier">remove_member_volatile_t</span> <span class="special">=</span> <span class="comment">//see below</span>
7597
7598<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
7599<span class="keyword">struct</span> <span class="identifier">remove_member_volatile</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">remove_member_volatile_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
7600</pre>
7601<h5>
7602<a name="callable_traits.reference.ref_remove_member_volatile.h2"></a>
7603        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_volatile.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_volatile.constraints">Constraints</a>
7604      </h5>
7605<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7606<li class="listitem">
7607            <code class="computeroutput"><span class="identifier">T</span></code> must be a function
7608            type or a member function pointer type
7609          </li>
7610<li class="listitem">
7611            If <code class="computeroutput"><span class="identifier">T</span></code> is a pointer, it
7612            may not be cv/ref qualified
7613          </li>
7614</ul></div>
7615<h5>
7616<a name="callable_traits.reference.ref_remove_member_volatile.h3"></a>
7617        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_volatile.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_volatile.behavior">Behavior</a>
7618      </h5>
7619<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7620<li class="listitem">
7621            A substitution failure occurs if the constraints are violated.
7622          </li>
7623<li class="listitem">
7624            Removes the member <code class="computeroutput"><span class="keyword">volatile</span></code>
7625            qualifier from <code class="computeroutput"><span class="identifier">T</span></code>, if
7626            present.
7627          </li>
7628</ul></div>
7629<h5>
7630<a name="callable_traits.reference.ref_remove_member_volatile.h4"></a>
7631        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_volatile.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_volatile.input_output_examples">Input/Output
7632        Examples</a>
7633      </h5>
7634<div class="informaltable"><table class="table">
7635<colgroup>
7636<col>
7637<col>
7638</colgroup>
7639<thead><tr>
7640<th>
7641                <p>
7642                  <code class="computeroutput"><span class="identifier">T</span></code>
7643                </p>
7644              </th>
7645<th>
7646                <p>
7647                  <code class="computeroutput"><span class="identifier">remove_member_volatile_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
7648                </p>
7649              </th>
7650</tr></thead>
7651<tbody>
7652<tr>
7653<td>
7654                <p>
7655                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
7656                  <span class="keyword">volatile</span></code>
7657                </p>
7658              </td>
7659<td>
7660                <p>
7661                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
7662                </p>
7663              </td>
7664</tr>
7665<tr>
7666<td>
7667                <p>
7668                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7669                  <span class="keyword">volatile</span></code>
7670                </p>
7671              </td>
7672<td>
7673                <p>
7674                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
7675                </p>
7676              </td>
7677</tr>
7678<tr>
7679<td>
7680                <p>
7681                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7682                  <span class="keyword">volatile</span> <span class="special">&amp;</span></code>
7683                </p>
7684              </td>
7685<td>
7686                <p>
7687                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7688                  <span class="special">&amp;</span></code>
7689                </p>
7690              </td>
7691</tr>
7692<tr>
7693<td>
7694                <p>
7695                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7696                  <span class="keyword">volatile</span> <span class="special">&amp;&amp;</span></code>
7697                </p>
7698              </td>
7699<td>
7700                <p>
7701                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7702                  <span class="special">&amp;&amp;</span></code>
7703                </p>
7704              </td>
7705</tr>
7706<tr>
7707<td>
7708                <p>
7709                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7710                  <span class="keyword">volatile</span></code>
7711                </p>
7712              </td>
7713<td>
7714                <p>
7715                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
7716                </p>
7717              </td>
7718</tr>
7719<tr>
7720<td>
7721                <p>
7722                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7723                  <span class="keyword">const</span> <span class="keyword">volatile</span></code>
7724                </p>
7725              </td>
7726<td>
7727                <p>
7728                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7729                  <span class="keyword">const</span></code>
7730                </p>
7731              </td>
7732</tr>
7733<tr>
7734<td>
7735                <p>
7736                  <code class="computeroutput"><span class="keyword">int</span></code>
7737                </p>
7738              </td>
7739<td>
7740                <p>
7741                  (substitution failure)
7742                </p>
7743              </td>
7744</tr>
7745<tr>
7746<td>
7747                <p>
7748                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(&amp;)()</span></code>
7749                </p>
7750              </td>
7751<td>
7752                <p>
7753                  (substitution failure)
7754                </p>
7755              </td>
7756</tr>
7757<tr>
7758<td>
7759                <p>
7760                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)()</span></code>
7761                </p>
7762              </td>
7763<td>
7764                <p>
7765                  (substitution failure)
7766                </p>
7767              </td>
7768</tr>
7769<tr>
7770<td>
7771                <p>
7772                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
7773                </p>
7774              </td>
7775<td>
7776                <p>
7777                  (substitution failure)
7778                </p>
7779              </td>
7780</tr>
7781<tr>
7782<td>
7783                <p>
7784                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
7785                  <span class="keyword">const</span><span class="special">)()</span></code>
7786                </p>
7787              </td>
7788<td>
7789                <p>
7790                  (substitution failure)
7791                </p>
7792              </td>
7793</tr>
7794</tbody>
7795</table></div>
7796<h5>
7797<a name="callable_traits.reference.ref_remove_member_volatile.h5"></a>
7798        <span class="phrase"><a name="callable_traits.reference.ref_remove_member_volatile.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_member_volatile.example_program">Example
7799        Program</a>
7800      </h5>
7801<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
7802<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">remove_member_volatile</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7803
7804<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
7805
7806<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">{};</span>
7807
7808<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
7809
7810    <span class="special">{</span>
7811        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span> <span class="keyword">volatile</span><span class="special">;</span>
7812        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span><span class="special">;</span>
7813        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_member_volatile_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
7814        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
7815    <span class="special">}</span> <span class="special">{</span>
7816        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">volatile</span> <span class="special">&amp;&amp;;</span>
7817        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="special">&amp;&amp;;</span>
7818        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_member_volatile_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
7819        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
7820    <span class="special">}</span> <span class="special">{</span>
7821        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">volatile</span> <span class="special">&amp;;</span>
7822        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="special">&amp;;</span>
7823        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_member_volatile_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
7824        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
7825    <span class="special">}</span> <span class="special">{</span>
7826        <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">volatile</span><span class="special">;</span>
7827        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
7828        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_member_volatile_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">&gt;;</span>
7829        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
7830    <span class="special">}</span>
7831<span class="special">}</span>
7832</pre>
7833</div>
7834<div class="section">
7835<div class="titlepage"><div><div><h3 class="title">
7836<a name="callable_traits.reference.ref_remove_noexcept"></a><a class="link" href="reference.html#callable_traits.reference.ref_remove_noexcept" title="remove_noexcept">remove_noexcept</a>
7837</h3></div></div></div>
7838<h5>
7839<a name="callable_traits.reference.ref_remove_noexcept.h0"></a>
7840        <span class="phrase"><a name="callable_traits.reference.ref_remove_noexcept.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_noexcept.header">Header</a>
7841      </h5>
7842<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">remove_noexcept</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
7843<h5>
7844<a name="callable_traits.reference.ref_remove_noexcept.h1"></a>
7845        <span class="phrase"><a name="callable_traits.reference.ref_remove_noexcept.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_noexcept.definition">Definition</a>
7846      </h5>
7847<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
7848<span class="keyword">using</span> <span class="identifier">remove_noexcept_t</span> <span class="special">=</span> <span class="comment">//see below</span>
7849
7850<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
7851<span class="keyword">struct</span> <span class="identifier">remove_noexcept</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">remove_noexcept_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
7852</pre>
7853<h5>
7854<a name="callable_traits.reference.ref_remove_noexcept.h2"></a>
7855        <span class="phrase"><a name="callable_traits.reference.ref_remove_noexcept.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_noexcept.constraints">Constraints</a>
7856      </h5>
7857<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7858<li class="listitem">
7859            <code class="computeroutput"><span class="identifier">T</span></code> must be one of the
7860            following:
7861            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
7862<li class="listitem">
7863                  function type
7864                </li>
7865<li class="listitem">
7866                  function pointer type
7867                </li>
7868<li class="listitem">
7869                  function reference type
7870                </li>
7871<li class="listitem">
7872                  member function pointer type
7873                </li>
7874</ul></div>
7875          </li>
7876<li class="listitem">
7877            If <code class="computeroutput"><span class="identifier">T</span></code> is a pointer, it
7878            may not be cv/ref qualified
7879          </li>
7880</ul></div>
7881<h5>
7882<a name="callable_traits.reference.ref_remove_noexcept.h3"></a>
7883        <span class="phrase"><a name="callable_traits.reference.ref_remove_noexcept.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_noexcept.behavior">Behavior</a>
7884      </h5>
7885<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7886<li class="listitem">
7887            A substitution failure occurs if the constraints are violated.
7888          </li>
7889<li class="listitem">
7890            Removes the <code class="computeroutput"><span class="keyword">noexcept</span></code> specifier
7891            from <code class="computeroutput"><span class="identifier">T</span></code>, if present.
7892          </li>
7893</ul></div>
7894<h5>
7895<a name="callable_traits.reference.ref_remove_noexcept.h4"></a>
7896        <span class="phrase"><a name="callable_traits.reference.ref_remove_noexcept.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_noexcept.input_output_examples">Input/Output
7897        Examples</a>
7898      </h5>
7899<div class="informaltable"><table class="table">
7900<colgroup>
7901<col>
7902<col>
7903</colgroup>
7904<thead><tr>
7905<th>
7906                <p>
7907                  <code class="computeroutput"><span class="identifier">T</span></code>
7908                </p>
7909              </th>
7910<th>
7911                <p>
7912                  <code class="computeroutput"><span class="identifier">remove_noexcept_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
7913                </p>
7914              </th>
7915</tr></thead>
7916<tbody>
7917<tr>
7918<td>
7919                <p>
7920                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
7921                  <span class="keyword">const</span> <span class="keyword">noexcept</span></code>
7922                </p>
7923              </td>
7924<td>
7925                <p>
7926                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
7927                  <span class="keyword">const</span></code>
7928                </p>
7929              </td>
7930</tr>
7931<tr>
7932<td>
7933                <p>
7934                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span>
7935                  <span class="keyword">noexcept</span></code>
7936                </p>
7937              </td>
7938<td>
7939                <p>
7940                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span></code>
7941                </p>
7942              </td>
7943</tr>
7944<tr>
7945<td>
7946                <p>
7947                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(&amp;)()</span>
7948                  <span class="keyword">noexcept</span></code>
7949                </p>
7950              </td>
7951<td>
7952                <p>
7953                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(&amp;)()</span></code>
7954                </p>
7955              </td>
7956</tr>
7957<tr>
7958<td>
7959                <p>
7960                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
7961                  <span class="keyword">noexcept</span></code>
7962                </p>
7963              </td>
7964<td>
7965                <p>
7966                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
7967                </p>
7968              </td>
7969</tr>
7970<tr>
7971<td>
7972                <p>
7973                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
7974                  <span class="keyword">const</span></code>
7975                </p>
7976              </td>
7977<td>
7978                <p>
7979                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
7980                  <span class="keyword">const</span></code>
7981                </p>
7982              </td>
7983</tr>
7984<tr>
7985<td>
7986                <p>
7987                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span></code>
7988                </p>
7989              </td>
7990<td>
7991                <p>
7992                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span></code>
7993                </p>
7994              </td>
7995</tr>
7996<tr>
7997<td>
7998                <p>
7999                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(&amp;)()</span></code>
8000                </p>
8001              </td>
8002<td>
8003                <p>
8004                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(&amp;)()</span></code>
8005                </p>
8006              </td>
8007</tr>
8008<tr>
8009<td>
8010                <p>
8011                  <code class="computeroutput"><span class="keyword">int</span></code>
8012                </p>
8013              </td>
8014<td>
8015                <p>
8016                  (substitution failure)
8017                </p>
8018              </td>
8019</tr>
8020<tr>
8021<td>
8022                <p>
8023                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
8024                </p>
8025              </td>
8026<td>
8027                <p>
8028                  (substitution failure)
8029                </p>
8030              </td>
8031</tr>
8032<tr>
8033<td>
8034                <p>
8035                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
8036                  <span class="keyword">const</span><span class="special">)()</span></code>
8037                </p>
8038              </td>
8039<td>
8040                <p>
8041                  (substitution failure)
8042                </p>
8043              </td>
8044</tr>
8045</tbody>
8046</table></div>
8047<h5>
8048<a name="callable_traits.reference.ref_remove_noexcept.h5"></a>
8049        <span class="phrase"><a name="callable_traits.reference.ref_remove_noexcept.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_noexcept.example_program">Example
8050        Program</a>
8051      </h5>
8052<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
8053<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">remove_noexcept</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8054
8055<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">::</span><span class="identifier">remove_noexcept_t</span><span class="special">;</span>
8056
8057<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
8058    <span class="identifier">remove_noexcept_t</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">&gt;,</span>
8059    <span class="keyword">int</span><span class="special">()</span>
8060<span class="special">&gt;{},</span> <span class="string">""</span><span class="special">);</span>
8061
8062<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
8063</pre>
8064</div>
8065<div class="section">
8066<div class="titlepage"><div><div><h3 class="title">
8067<a name="callable_traits.reference.ref_remove_transaction_safe"></a><a class="link" href="reference.html#callable_traits.reference.ref_remove_transaction_safe" title="remove_transaction_safe">remove_transaction_safe</a>
8068</h3></div></div></div>
8069<h5>
8070<a name="callable_traits.reference.ref_remove_transaction_safe.h0"></a>
8071        <span class="phrase"><a name="callable_traits.reference.ref_remove_transaction_safe.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_transaction_safe.header">Header</a>
8072      </h5>
8073<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">remove_transaction_safe</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
8074<h5>
8075<a name="callable_traits.reference.ref_remove_transaction_safe.h1"></a>
8076        <span class="phrase"><a name="callable_traits.reference.ref_remove_transaction_safe.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_transaction_safe.definition">Definition</a>
8077      </h5>
8078<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
8079<span class="keyword">using</span> <span class="identifier">remove_transaction_safe_t</span> <span class="special">=</span> <span class="comment">//see below</span>
8080
8081<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
8082<span class="keyword">struct</span> <span class="identifier">remove_transaction_safe</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">remove_transaction_safe_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
8083</pre>
8084<h5>
8085<a name="callable_traits.reference.ref_remove_transaction_safe.h2"></a>
8086        <span class="phrase"><a name="callable_traits.reference.ref_remove_transaction_safe.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_transaction_safe.constraints">Constraints</a>
8087      </h5>
8088<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
8089<li class="listitem">
8090            <code class="computeroutput"><span class="identifier">T</span></code> must be one of the
8091            following:
8092            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
8093<li class="listitem">
8094                  function type
8095                </li>
8096<li class="listitem">
8097                  function pointer type
8098                </li>
8099<li class="listitem">
8100                  function reference type
8101                </li>
8102<li class="listitem">
8103                  member function pointer type
8104                </li>
8105</ul></div>
8106          </li>
8107<li class="listitem">
8108            If <code class="computeroutput"><span class="identifier">T</span></code> is a pointer, it
8109            may not be cv/ref qualified
8110          </li>
8111</ul></div>
8112<h5>
8113<a name="callable_traits.reference.ref_remove_transaction_safe.h3"></a>
8114        <span class="phrase"><a name="callable_traits.reference.ref_remove_transaction_safe.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_transaction_safe.behavior">Behavior</a>
8115      </h5>
8116<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
8117<li class="listitem">
8118            A substitution failure occurs if the constraints are violated.
8119          </li>
8120<li class="listitem">
8121            Removes the member <code class="computeroutput"><span class="identifier">transaction_safe</span></code>
8122            specifier from <code class="computeroutput"><span class="identifier">T</span></code>, if
8123            present.
8124          </li>
8125</ul></div>
8126<h5>
8127<a name="callable_traits.reference.ref_remove_transaction_safe.h4"></a>
8128        <span class="phrase"><a name="callable_traits.reference.ref_remove_transaction_safe.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_transaction_safe.input_output_examples">Input/Output
8129        Examples</a>
8130      </h5>
8131<div class="informaltable"><table class="table">
8132<colgroup>
8133<col>
8134<col>
8135</colgroup>
8136<thead><tr>
8137<th>
8138                <p>
8139                  <code class="computeroutput"><span class="identifier">T</span></code>
8140                </p>
8141              </th>
8142<th>
8143                <p>
8144                  <code class="computeroutput"><span class="identifier">remove_transaction_safe_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
8145                </p>
8146              </th>
8147</tr></thead>
8148<tbody>
8149<tr>
8150<td>
8151                <p>
8152                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
8153                  <span class="keyword">const</span> <span class="identifier">transaction_safe</span></code>
8154                </p>
8155              </td>
8156<td>
8157                <p>
8158                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
8159                  <span class="keyword">const</span></code>
8160                </p>
8161              </td>
8162</tr>
8163<tr>
8164<td>
8165                <p>
8166                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span>
8167                  <span class="identifier">transaction_safe</span></code>
8168                </p>
8169              </td>
8170<td>
8171                <p>
8172                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span></code>
8173                </p>
8174              </td>
8175</tr>
8176<tr>
8177<td>
8178                <p>
8179                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(&amp;)()</span>
8180                  <span class="identifier">transaction_safe</span></code>
8181                </p>
8182              </td>
8183<td>
8184                <p>
8185                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(&amp;)()</span></code>
8186                </p>
8187              </td>
8188</tr>
8189<tr>
8190<td>
8191                <p>
8192                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
8193                  <span class="identifier">transaction_safe</span></code>
8194                </p>
8195              </td>
8196<td>
8197                <p>
8198                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
8199                </p>
8200              </td>
8201</tr>
8202<tr>
8203<td>
8204                <p>
8205                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
8206                  <span class="keyword">const</span></code>
8207                </p>
8208              </td>
8209<td>
8210                <p>
8211                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span>
8212                  <span class="keyword">const</span></code>
8213                </p>
8214              </td>
8215</tr>
8216<tr>
8217<td>
8218                <p>
8219                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span></code>
8220                </p>
8221              </td>
8222<td>
8223                <p>
8224                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span></code>
8225                </p>
8226              </td>
8227</tr>
8228<tr>
8229<td>
8230                <p>
8231                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(&amp;)()</span></code>
8232                </p>
8233              </td>
8234<td>
8235                <p>
8236                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(&amp;)()</span></code>
8237                </p>
8238              </td>
8239</tr>
8240<tr>
8241<td>
8242                <p>
8243                  <code class="computeroutput"><span class="keyword">int</span></code>
8244                </p>
8245              </td>
8246<td>
8247                <p>
8248                  (substitution failure)
8249                </p>
8250              </td>
8251</tr>
8252<tr>
8253<td>
8254                <p>
8255                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
8256                </p>
8257              </td>
8258<td>
8259                <p>
8260                  (substitution failure)
8261                </p>
8262              </td>
8263</tr>
8264<tr>
8265<td>
8266                <p>
8267                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(</span><span class="identifier">foo</span><span class="special">::*</span>
8268                  <span class="keyword">const</span><span class="special">)()</span></code>
8269                </p>
8270              </td>
8271<td>
8272                <p>
8273                  (substitution failure)
8274                </p>
8275              </td>
8276</tr>
8277</tbody>
8278</table></div>
8279<h5>
8280<a name="callable_traits.reference.ref_remove_transaction_safe.h5"></a>
8281        <span class="phrase"><a name="callable_traits.reference.ref_remove_transaction_safe.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_transaction_safe.example_program">Example
8282        Program</a>
8283      </h5>
8284<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
8285<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">remove_transaction_safe</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8286
8287<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
8288
8289<span class="keyword">using</span> <span class="identifier">ts</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">()</span> <span class="identifier">transaction_safe</span><span class="special">;</span>
8290<span class="keyword">using</span> <span class="identifier">not_ts</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">();</span>
8291<span class="keyword">using</span> <span class="identifier">ts_removed</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_transaction_safe_t</span><span class="special">&lt;</span><span class="identifier">ts</span><span class="special">&gt;;</span>
8292
8293<span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">not_ts</span><span class="special">,</span> <span class="identifier">ts_removed</span><span class="special">&gt;{},</span> <span class="string">""</span><span class="special">);</span>
8294
8295<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
8296</pre>
8297</div>
8298<div class="section">
8299<div class="titlepage"><div><div><h3 class="title">
8300<a name="callable_traits.reference.ref_remove_varargs"></a><a class="link" href="reference.html#callable_traits.reference.ref_remove_varargs" title="remove_varargs">remove_varargs</a>
8301</h3></div></div></div>
8302<h5>
8303<a name="callable_traits.reference.ref_remove_varargs.h0"></a>
8304        <span class="phrase"><a name="callable_traits.reference.ref_remove_varargs.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_varargs.header">Header</a>
8305      </h5>
8306<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">remove_varargs</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
8307<h5>
8308<a name="callable_traits.reference.ref_remove_varargs.h1"></a>
8309        <span class="phrase"><a name="callable_traits.reference.ref_remove_varargs.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_varargs.definition">Definition</a>
8310      </h5>
8311<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
8312<span class="keyword">using</span> <span class="identifier">remove_varargs_t</span> <span class="special">=</span> <span class="comment">//see below</span>
8313
8314<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
8315<span class="keyword">struct</span> <span class="identifier">remove_varargs</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">remove_varargs_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
8316</pre>
8317<h5>
8318<a name="callable_traits.reference.ref_remove_varargs.h2"></a>
8319        <span class="phrase"><a name="callable_traits.reference.ref_remove_varargs.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_varargs.constraints">Constraints</a>
8320      </h5>
8321<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
8322<li class="listitem">
8323            <code class="computeroutput"><span class="identifier">T</span></code> must be one of the
8324            following:
8325            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
8326<li class="listitem">
8327                  function type
8328                </li>
8329<li class="listitem">
8330                  function pointer type
8331                </li>
8332<li class="listitem">
8333                  function reference type
8334                </li>
8335<li class="listitem">
8336                  member function pointer type
8337                </li>
8338</ul></div>
8339          </li>
8340<li class="listitem">
8341            If <code class="computeroutput"><span class="identifier">T</span></code> is a pointer, it
8342            may not be cv/ref qualified
8343          </li>
8344</ul></div>
8345<h5>
8346<a name="callable_traits.reference.ref_remove_varargs.h3"></a>
8347        <span class="phrase"><a name="callable_traits.reference.ref_remove_varargs.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_varargs.behavior">Behavior</a>
8348      </h5>
8349<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
8350<li class="listitem">
8351            A substitution failure occurs if the constraints are violated.
8352          </li>
8353<li class="listitem">
8354            Removes C-style variadics (<code class="computeroutput"><span class="special">...</span></code>)
8355            from the signature of <code class="computeroutput"><span class="identifier">T</span></code>,
8356            if present.
8357          </li>
8358</ul></div>
8359<h5>
8360<a name="callable_traits.reference.ref_remove_varargs.h4"></a>
8361        <span class="phrase"><a name="callable_traits.reference.ref_remove_varargs.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_varargs.input_output_examples">Input/Output
8362        Examples</a>
8363      </h5>
8364<div class="informaltable"><table class="table">
8365<colgroup>
8366<col>
8367<col>
8368</colgroup>
8369<thead><tr>
8370<th>
8371                <p>
8372                  <code class="computeroutput"><span class="identifier">T</span></code>
8373                </p>
8374              </th>
8375<th>
8376                <p>
8377                  <code class="computeroutput"><span class="identifier">remove_varargs_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
8378                </p>
8379              </th>
8380</tr></thead>
8381<tbody>
8382<tr>
8383<td>
8384                <p>
8385                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(...)</span></code>
8386                </p>
8387              </td>
8388<td>
8389                <p>
8390                  <code class="computeroutput"><span class="keyword">int</span><span class="special">()</span></code>
8391                </p>
8392              </td>
8393</tr>
8394<tr>
8395<td>
8396                <p>
8397                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="special">...)</span></code>
8398                </p>
8399              </td>
8400<td>
8401                <p>
8402                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span></code>
8403                </p>
8404              </td>
8405</tr>
8406<tr>
8407<td>
8408                <p>
8409                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(&amp;)(...)</span></code>
8410                </p>
8411              </td>
8412<td>
8413                <p>
8414                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(&amp;)()</span></code>
8415                </p>
8416              </td>
8417</tr>
8418<tr>
8419<td>
8420                <p>
8421                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*)()</span></code>
8422                </p>
8423              </td>
8424<td>
8425                <p>
8426                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(*)()</span></code>
8427                </p>
8428              </td>
8429</tr>
8430<tr>
8431<td>
8432                <p>
8433                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(...)</span></code>
8434                </p>
8435              </td>
8436<td>
8437                <p>
8438                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span></code>
8439                </p>
8440              </td>
8441</tr>
8442<tr>
8443<td>
8444                <p>
8445                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(...)</span>
8446                  <span class="special">&amp;</span></code>
8447                </p>
8448              </td>
8449<td>
8450                <p>
8451                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
8452                  <span class="special">&amp;</span></code>
8453                </p>
8454              </td>
8455</tr>
8456<tr>
8457<td>
8458                <p>
8459                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(...)</span>
8460                  <span class="special">&amp;&amp;</span></code>
8461                </p>
8462              </td>
8463<td>
8464                <p>
8465                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
8466                  <span class="special">&amp;&amp;</span></code>
8467                </p>
8468              </td>
8469</tr>
8470<tr>
8471<td>
8472                <p>
8473                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(...)</span>
8474                  <span class="keyword">const</span></code>
8475                </p>
8476              </td>
8477<td>
8478                <p>
8479                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
8480                  <span class="keyword">const</span></code>
8481                </p>
8482              </td>
8483</tr>
8484<tr>
8485<td>
8486                <p>
8487                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(...)</span>
8488                  <span class="identifier">transaction_safe</span></code>
8489                </p>
8490              </td>
8491<td>
8492                <p>
8493                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
8494                  <span class="identifier">transaction_safe</span></code>
8495                </p>
8496              </td>
8497</tr>
8498<tr>
8499<td>
8500                <p>
8501                  <code class="computeroutput"><span class="keyword">int</span></code>
8502                </p>
8503              </td>
8504<td>
8505                <p>
8506                  (substitution failure)
8507                </p>
8508              </td>
8509</tr>
8510<tr>
8511<td>
8512                <p>
8513                  <code class="computeroutput"><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*</span></code>
8514                </p>
8515              </td>
8516<td>
8517                <p>
8518                  (substitution failure)
8519                </p>
8520              </td>
8521</tr>
8522<tr>
8523<td>
8524                <p>
8525                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*</span>
8526                  <span class="keyword">const</span><span class="special">)()</span></code>
8527                </p>
8528              </td>
8529<td>
8530                <p>
8531                  (substitution failure)
8532                </p>
8533              </td>
8534</tr>
8535</tbody>
8536</table></div>
8537<h5>
8538<a name="callable_traits.reference.ref_remove_varargs.h5"></a>
8539        <span class="phrase"><a name="callable_traits.reference.ref_remove_varargs.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_remove_varargs.example_program">Example
8540        Program</a>
8541      </h5>
8542<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
8543<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">remove_varargs</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8544
8545<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
8546
8547<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">{};</span>
8548
8549<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
8550
8551    <span class="special">{</span>
8552        <span class="keyword">using</span> <span class="identifier">f</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="special">...);</span>
8553        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="keyword">int</span><span class="special">);</span>
8554        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_varargs_t</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">&gt;;</span>
8555        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
8556    <span class="special">}</span> <span class="special">{</span>
8557        <span class="keyword">using</span> <span class="identifier">fp</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(*)(...);</span>
8558        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(*)();</span>
8559        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_varargs_t</span><span class="special">&lt;</span><span class="identifier">fp</span><span class="special">&gt;;</span>
8560        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
8561    <span class="special">}</span> <span class="special">{</span>
8562        <span class="keyword">using</span> <span class="identifier">fr</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(&amp;)(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*,</span> <span class="special">...);</span>
8563        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(&amp;)(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*);</span>
8564        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_varargs_t</span><span class="special">&lt;</span><span class="identifier">fr</span><span class="special">&gt;;</span>
8565        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
8566    <span class="special">}</span> <span class="special">{</span>
8567        <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)(...)</span> <span class="keyword">const</span><span class="special">;</span>
8568        <span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">void</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span><span class="special">;</span>
8569        <span class="keyword">using</span> <span class="identifier">test</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">remove_varargs_t</span><span class="special">&lt;</span><span class="identifier">pmf</span><span class="special">&gt;;</span>
8570        <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span>
8571    <span class="special">}</span>
8572<span class="special">}</span>
8573</pre>
8574</div>
8575<div class="section">
8576<div class="titlepage"><div><div><h3 class="title">
8577<a name="callable_traits.reference.ref_return_type"></a><a class="link" href="reference.html#callable_traits.reference.ref_return_type" title="return_type">return_type</a>
8578</h3></div></div></div>
8579<h5>
8580<a name="callable_traits.reference.ref_return_type.h0"></a>
8581        <span class="phrase"><a name="callable_traits.reference.ref_return_type.header"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_return_type.header">Header</a>
8582      </h5>
8583<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">/</span><span class="identifier">return_type</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></pre>
8584<h5>
8585<a name="callable_traits.reference.ref_return_type.h1"></a>
8586        <span class="phrase"><a name="callable_traits.reference.ref_return_type.definition"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_return_type.definition">Definition</a>
8587      </h5>
8588<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
8589<span class="keyword">using</span> <span class="identifier">return_type_t</span> <span class="special">=</span> <span class="comment">//see below</span>
8590
8591<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
8592<span class="keyword">struct</span> <span class="identifier">return_type</span> <span class="special">:</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">return_type_impl</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{};</span>
8593</pre>
8594<h5>
8595<a name="callable_traits.reference.ref_return_type.h2"></a>
8596        <span class="phrase"><a name="callable_traits.reference.ref_return_type.constraints"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_return_type.constraints">Constraints</a>
8597      </h5>
8598<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
8599            <code class="computeroutput"><span class="identifier">T</span></code> must be one of the
8600            following:
8601            <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
8602<li class="listitem">
8603                  function
8604                </li>
8605<li class="listitem">
8606                  function pointer
8607                </li>
8608<li class="listitem">
8609                  function reference
8610                </li>
8611<li class="listitem">
8612                  member function pointer
8613                </li>
8614<li class="listitem">
8615                  member data pointer
8616                </li>
8617<li class="listitem">
8618                  user-defined type with a non-overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>
8619                </li>
8620<li class="listitem">
8621                  type of a non-generic lambda
8622                </li>
8623</ul></div>
8624          </li></ul></div>
8625<h5>
8626<a name="callable_traits.reference.ref_return_type.h3"></a>
8627        <span class="phrase"><a name="callable_traits.reference.ref_return_type.behavior"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_return_type.behavior">Behavior</a>
8628      </h5>
8629<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
8630<li class="listitem">
8631            When the constraints are violated, a substitution failure occurs.
8632          </li>
8633<li class="listitem">
8634            The aliased type is the return type of <code class="computeroutput"><span class="identifier">T</span></code>.
8635          </li>
8636</ul></div>
8637<h5>
8638<a name="callable_traits.reference.ref_return_type.h4"></a>
8639        <span class="phrase"><a name="callable_traits.reference.ref_return_type.input_output_examples"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_return_type.input_output_examples">Input/Output
8640        Examples</a>
8641      </h5>
8642<div class="informaltable"><table class="table">
8643<colgroup>
8644<col>
8645<col>
8646</colgroup>
8647<thead><tr>
8648<th>
8649                <p>
8650                  <code class="computeroutput"><span class="identifier">T</span></code>
8651                </p>
8652              </th>
8653<th>
8654                <p>
8655                  <code class="computeroutput"><span class="identifier">return_type_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span>
8656                  <span class="identifier">std</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&gt;</span></code>
8657                </p>
8658              </th>
8659</tr></thead>
8660<tbody>
8661<tr>
8662<td>
8663                <p>
8664                  <code class="computeroutput"><span class="keyword">void</span><span class="special">()</span></code>
8665                </p>
8666              </td>
8667<td>
8668                <p>
8669                  <code class="computeroutput"><span class="keyword">void</span></code>
8670                </p>
8671              </td>
8672</tr>
8673<tr>
8674<td>
8675                <p>
8676                  <code class="computeroutput"><span class="keyword">float</span><span class="special">(*)()</span></code>
8677                </p>
8678              </td>
8679<td>
8680                <p>
8681                  <code class="computeroutput"><span class="keyword">float</span></code>
8682                </p>
8683              </td>
8684</tr>
8685<tr>
8686<td>
8687                <p>
8688                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*(&amp;)()</span></code>
8689                </p>
8690              </td>
8691<td>
8692                <p>
8693                  <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">char</span>
8694                  <span class="special">*</span></code>
8695                </p>
8696              </td>
8697</tr>
8698<tr>
8699<td>
8700                <p>
8701                  <code class="computeroutput"><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span>
8702                  <span class="keyword">const</span></code>
8703                </p>
8704              </td>
8705<td>
8706                <p>
8707                  <code class="computeroutput"><span class="keyword">int</span></code>
8708                </p>
8709              </td>
8710</tr>
8711<tr>
8712<td>
8713                <p>
8714                  <code class="computeroutput"><span class="keyword">int</span></code>
8715                </p>
8716              </td>
8717<td>
8718                <p>
8719                  (substitution failure)
8720                </p>
8721              </td>
8722</tr>
8723<tr>
8724<td>
8725                <p>
8726                  <code class="computeroutput"><span class="keyword">int</span> <span class="special">(*</span><span class="keyword">const</span><span class="special">)()</span></code>
8727                </p>
8728              </td>
8729<td>
8730                <p>
8731                  (substitution failure)
8732                </p>
8733              </td>
8734</tr>
8735</tbody>
8736</table></div>
8737<h5>
8738<a name="callable_traits.reference.ref_return_type.h5"></a>
8739        <span class="phrase"><a name="callable_traits.reference.ref_return_type.example_program"></a></span><a class="link" href="reference.html#callable_traits.reference.ref_return_type.example_program">Example
8740        Program</a>
8741      </h5>
8742<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
8743<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">callable_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8744
8745<span class="keyword">namespace</span> <span class="identifier">ct</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">callable_traits</span><span class="special">;</span>
8746
8747<span class="keyword">using</span> <span class="identifier">expect</span> <span class="special">=</span> <span class="keyword">int</span><span class="special">;</span>
8748
8749<span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">;</span>
8750
8751<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
8752<span class="keyword">void</span> <span class="identifier">test</span><span class="special">()</span> <span class="special">{</span>
8753    <span class="keyword">using</span> <span class="identifier">result</span> <span class="special">=</span> <span class="identifier">ct</span><span class="special">::</span><span class="identifier">return_type_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;;</span>
8754    <span class="keyword">static_assert</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">expect</span><span class="special">,</span> <span class="identifier">result</span><span class="special">&gt;{},</span> <span class="string">""</span><span class="special">);</span>
8755<span class="special">}</span>
8756
8757<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
8758
8759    <span class="identifier">test</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()&gt;();</span>
8760    <span class="identifier">test</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(*)()&gt;();</span>
8761    <span class="identifier">test</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(&amp;)()&gt;();</span>
8762    <span class="identifier">test</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">()</span> <span class="keyword">const</span><span class="special">&gt;();</span>
8763    <span class="identifier">test</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()</span> <span class="keyword">const</span><span class="special">&gt;();</span>
8764
8765    <span class="keyword">auto</span> <span class="identifier">x</span> <span class="special">=</span> <span class="special">[]()</span> <span class="special">-&gt;</span> <span class="keyword">int</span> <span class="special">{</span> <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> <span class="special">};</span>
8766
8767    <span class="identifier">test</span><span class="special">&lt;</span><span class="keyword">decltype</span><span class="special">(</span><span class="identifier">x</span><span class="special">)&gt;();</span>
8768<span class="special">}</span>
8769</pre>
8770</div>
8771</div>
8772<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
8773<td align="left"></td>
8774<td align="right"><div class="copyright-footer">Copyright © 2016-2018 Barrett Adair<p>
8775        Distributed under the Boost Software License, Version 1.0. (See accompanying
8776        file LICENSE.md or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
8777      </p>
8778</div></td>
8779</tr></table>
8780<hr>
8781<div class="spirit-nav">
8782<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="faq.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
8783</div>
8784</body>
8785</html>
8786