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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">&</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">&</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">&&</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">&&</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">(&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 357<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&&;</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">&&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&;</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">&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</span><span class="identifier">f</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">&</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">&</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">&&</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">&&</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">(&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 630<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&&;</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">&&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&;</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">&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</span><span class="identifier">f</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">&</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"><</span><span class="identifier">T</span><span class="special">></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">&</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">&</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">&</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">&</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">&&</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">&</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">&</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">&</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">(&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 892<span class="preprocessor">#include</span> <span class="special"><</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">></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">&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&;</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">&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&&;</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">&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&;</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"><</span><span class="identifier">f</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">&&</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"><</span><span class="identifier">T</span><span class="special">></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">&&</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">&&</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">&</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">&</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">&&</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">&&</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">&&</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">&&</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">(&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 1158<span class="preprocessor">#include</span> <span class="special"><</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">></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">&&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&&;</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">&&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&;</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">&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&&;</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"><</span><span class="identifier">f</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">&</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">&</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">&&</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">&&</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">(&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 1417<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&&;</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">&&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&;</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">&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</span><span class="identifier">f</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">(&)()</span></code> 1554 </p> 1555 </td> 1556<td> 1557 <p> 1558 <code class="computeroutput"><span class="keyword">int</span><span class="special">(&)()</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">&</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">&</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">&&</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">&&</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">(*&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 1690<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span> 1695 <span class="identifier">add_noexcept_t</span><span class="special"><</span><span class="keyword">int</span><span class="special">()>,</span> 1696 <span class="keyword">int</span><span class="special">()</span> <span class="keyword">noexcept</span> 1697<span class="special">>{},</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">(&)()</span></code> 1804 </p> 1805 </td> 1806<td> 1807 <p> 1808 <code class="computeroutput"><span class="keyword">int</span><span class="special">(&)()</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">&</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">&</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">&&</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">&&</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">(*&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 1939<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">not_safe</span><span class="special">>;</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"><</span><span class="identifier">safe</span><span class="special">,</span> <span class="identifier">safe_added</span><span class="special">>{},</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">(&)()</span></code> 2064 </p> 2065 </td> 2066<td> 2067 <p> 2068 <code class="computeroutput"><span class="keyword">int</span><span class="special">(&)(...)</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">&</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">&</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">&&</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">&&</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">(*&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 2208<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">f</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</span><span class="identifier">fp</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">(&)(</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">(&)(</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"><</span><span class="identifier">fr</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</span><span class="identifier">test</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">twice</span><span class="special">>::</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"><</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">></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"><</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">></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"><</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">></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"><</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">C</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">></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">(&)()</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">&</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">&</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">&&</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">&&</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">&</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">&</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 2511<span class="preprocessor">#include</span> <span class="special"><</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">></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 -> 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"><</span><span class="identifier">f</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">>;</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"><</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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) -> 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"><</span><span class="identifier">f</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">>;</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"><</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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) -> 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">(*&)();</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"><</span><span class="identifier">f</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">>;</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"><</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</span><span class="identifier">f</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">>;</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"><</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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 -> 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">(&)();</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"><</span><span class="identifier">f</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">>;</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"><</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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 -> 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"><</span><span class="identifier">f</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">>;</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"><</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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 -> 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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">>;</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"><</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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 -> 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"><</span><span class="identifier">f</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">>;</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"><</span><span class="identifier">g</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</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">></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"><</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">></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"><</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">></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"><</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">R</span><span class="special">></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"><</span><span class="identifier">Args</span><span class="special">...></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"><</span><span class="identifier">T</span><span class="special">,</span> <span class="keyword">float</span><span class="special">></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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">></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">(&)()</span></code> 2723 </p> 2724 </td> 2725<td> 2726 <p> 2727 <code class="computeroutput"><span class="keyword">float</span><span class="special">(&)()</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">&</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">&</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">&&</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">&&</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span><span class="special">...></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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> 2887 <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span><span class="special">...></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">></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"><</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">Container</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</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">></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"><</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">(&)(</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"><</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">&&</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"><</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">></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"><></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">&)(</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"><</span><span class="identifier">foo</span><span class="special">&,</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">></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"><</span><span class="keyword">const</span> <span class="identifier">foo</span><span class="special">&,</span> <span class="keyword">int</span><span class="special">></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">&&</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"><</span><span class="keyword">volatile</span> <span class="identifier">foo</span> 3095 <span class="special">&&></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"><</span><span class="keyword">const</span> <span class="identifier">foo</span><span class="special">&></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"><</span><span class="keyword">const</span> <span class="identifier">foo</span><span class="special">&></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"><</span><span class="identifier">type_traits</span><span class="special">></span> 3156<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">memory</span><span class="special">></span> 3157<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</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">></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"><</span><span class="identifier">T</span><span class="special">>;</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"><</span><span class="identifier">args_t</span><span class="special">,</span> <span class="identifier">Expect</span><span class="special">>::</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">&,</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*>;</span> 3173 3174 <span class="identifier">test</span><span class="special"><</span><span class="identifier">lam</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>();</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">&,</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"><</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">&,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*>;</span> 3181 3182 <span class="identifier">test</span><span class="special"><</span><span class="identifier">pmf</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>();</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">&,</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*>;</span> 3188 <span class="identifier">test</span><span class="special"><</span><span class="identifier">function_ptr</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>();</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">(&)(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&,</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*>;</span> 3194 <span class="identifier">test</span><span class="special"><</span><span class="identifier">function_ref</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>();</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">&,</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*>;</span> 3200 <span class="identifier">test</span><span class="special"><</span><span class="identifier">function</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>();</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">&,</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*>;</span> 3206 <span class="identifier">test</span><span class="special"><</span><span class="identifier">abominable</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>();</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 3307<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</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"><</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()>>::</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"><</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"><</span><span class="keyword">int</span> <span class="identifier">foo</span><span class="special">::*>>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">&)(</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">(&)(</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">&,</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">&,</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">&&</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">&&)</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">&)</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">&)</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 3598<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">>;</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">&,</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"><</span><span class="identifier">expect</span><span class="special">,</span> <span class="identifier">type</span><span class="special">>{},</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">&,</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"><</span><span class="identifier">lam</span><span class="special">>();</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">&,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*);</span> 3619 <span class="identifier">test</span><span class="special"><</span><span class="identifier">function_ptr</span><span class="special">>();</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">(&)(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">float</span><span class="special">&,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*);</span> 3622 <span class="identifier">test</span><span class="special"><</span><span class="identifier">function_ref</span><span class="special">>();</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">&,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*);</span> 3625 <span class="identifier">test</span><span class="special"><</span><span class="identifier">function</span><span class="special">>();</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">&,</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"><</span><span class="identifier">abominable</span><span class="special">>();</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></span></code> is equivalent to <code class="computeroutput"><span class="identifier">has_member_qualifiers</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></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">&&</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">&</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">::*&)()</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">(*&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 3910<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</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><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"><</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">>::</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"><</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></span></code> 3958 and is aliased by <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">has_varargs</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></span></code> is equivalent to <code class="computeroutput"><span class="identifier">has_varargs</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></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">(&)(...)</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">(*&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 4135<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="keyword">int</span><span class="special">(...)>::</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"><</span><span class="keyword">int</span><span class="special">()>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></span></code> is equivalent to <code class="computeroutput"><span class="identifier">has_void_return</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></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">&)()</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">(&)()</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">(*&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 4358<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="keyword">void</span><span class="special">()>::</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"><</span><span class="keyword">int</span><span class="special">()>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_const_member</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></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">&</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">&&</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">::*&)()</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">&&</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">&&</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 4651<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</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><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"><</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_cv_member</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></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">&</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">&)()</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">&&</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 4923<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</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><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"><</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()>::</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"><</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><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"><</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">>::</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"><</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">></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"><</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">></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"><</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">></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"><</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">></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"><</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">></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"><</span><span class="identifier">type_traits</span><span class="special">></span> 4999<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_integral</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">value</span><span class="special">>::</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"><</span><span class="identifier">foo</span><span class="special">,</span> <span class="keyword">int</span><span class="special">>::</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"><</span><span class="identifier">foo</span><span class="special">,</span> <span class="keyword">double</span><span class="special">>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">>::</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 '&' 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 '&' 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 '&' 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"><</span><span class="identifier">T</span><span class="special">></span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_lvalue_reference_member</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></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">&</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">&</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">&&</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 5255<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="keyword">int</span><span class="special">()&>::</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"><</span><span class="keyword">int</span><span class="special">()&&>::</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"><</span><span class="keyword">int</span><span class="special">()>::</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"><</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&>::</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"><</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&&>::</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"><</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">>::</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 '&' or '&&' 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 '&' or '&&' 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 '&' or '&&' 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"><</span><span class="identifier">T</span><span class="special">></span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_reference_member</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></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">&</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">&&</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">&&</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">&</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 5526<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="keyword">int</span><span class="special">()&>::</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"><</span><span class="keyword">int</span><span class="special">()&&>::</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"><</span><span class="keyword">int</span><span class="special">()>::</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"><</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&>::</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"><</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&&>::</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"><</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">>::</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 '&&' 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 '&&' 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 '&&' 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"><</span><span class="identifier">T</span><span class="special">></span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_rvalue_reference_member</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></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">&&</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">&&</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">&</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 5783<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="keyword">int</span><span class="special">()&&>::</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"><</span><span class="keyword">int</span><span class="special">()&>::</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"><</span><span class="keyword">int</span><span class="special">()>::</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"><</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&&>::</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"><</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()&>::</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"><</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_noexcept</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></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">&)()</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">(&)()</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">&</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"><</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">></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"><</span><span class="keyword">int</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">>::</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"><</span><span class="keyword">int</span><span class="special">(*)()</span> <span class="keyword">noexcept</span><span class="special">>::</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"><</span><span class="keyword">int</span><span class="special">(&)()</span> <span class="keyword">noexcept</span><span class="special">>::</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"><</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">>::</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"><</span><span class="keyword">int</span><span class="special">()>::</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"><</span><span class="keyword">int</span><span class="special">(*)()>::</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"><</span><span class="keyword">int</span><span class="special">(&)()>::</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"><</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><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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_transaction_safe</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></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">(&)()</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">&</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"><</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">></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"><</span><span class="keyword">int</span><span class="special">()</span> <span class="identifier">transaction_safe</span><span class="special">>::</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"><</span><span class="keyword">int</span><span class="special">(*)()</span> <span class="identifier">transaction_safe</span><span class="special">>::</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"><</span><span class="keyword">int</span><span class="special">(&)()</span> <span class="identifier">transaction_safe</span><span class="special">>::</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"><</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">>::</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"><</span><span class="keyword">int</span><span class="special">()>::</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"><</span><span class="keyword">int</span><span class="special">(*)()>::</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"><</span><span class="keyword">int</span><span class="special">(&)()>::</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"><</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><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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></span></code> is equivalent to <code class="computeroutput"><span class="identifier">is_volatile_member</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">T</span><span class="special">></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">&&</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">&&</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">&&</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 6635<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="keyword">int</span><span class="special">()</span> <span class="keyword">volatile</span><span class="special">>::</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"><</span><span class="keyword">int</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">volatile</span><span class="special">>::</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"><</span><span class="keyword">int</span><span class="special">()>::</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"><</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">>::</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"><</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><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"><</span><span class="keyword">int</span><span class="special">(</span><span class="identifier">foo</span><span class="special">::*)()>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></span> <span class="keyword">const</span> <span class="special">&</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"><</span><span class="identifier">T</span><span class="special">></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">&</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">&</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">&&</span></code> 6753 </p> 6754 </td> 6755<td> 6756 <p> 6757 <code class="computeroutput"><span class="identifier">foo</span> <span class="special">&&</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">::*&)()</span> 6765 <span class="keyword">volatile</span> <span class="special">&&</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">&&</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">&</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">&</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 6810<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">foo</span> <span class="special">&,</span> 6817 <span class="identifier">ct</span><span class="special">::</span><span class="identifier">qualified_class_of_t</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="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"><</span><span class="identifier">foo</span> <span class="keyword">const</span> <span class="special">&,</span> 6820 <span class="identifier">ct</span><span class="special">::</span><span class="identifier">qualified_class_of_t</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><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"><</span><span class="identifier">foo</span> <span class="keyword">volatile</span> <span class="special">&&,</span> 6823 <span class="identifier">ct</span><span class="special">::</span><span class="identifier">qualified_class_of_t</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">&&>>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">&</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">&</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">&&</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">&&</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">(&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 7048<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&&;</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">&&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&;</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">&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</span><span class="identifier">f</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">&</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">&</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">&&</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">&&</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">(&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 7312<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&&;</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">&&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&;</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">&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</span><span class="identifier">f</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">&</span></code> or 7388 <code class="computeroutput"><span class="special">&&</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"><</span><span class="identifier">T</span><span class="special">></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">&</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">&</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">&</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">&&</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">(&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 7550<span class="preprocessor">#include</span> <span class="special"><</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">></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">&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&&;</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"><</span><span class="identifier">f</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">&</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">&</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">&&</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">&&</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">(&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 7802<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&&;</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">&&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">&;</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">&;</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</span><span class="identifier">f</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">(&)()</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">(&)()</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">(&)()</span></code> 8000 </p> 8001 </td> 8002<td> 8003 <p> 8004 <code class="computeroutput"><span class="keyword">int</span><span class="special">(&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 8053<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span> 8058 <span class="identifier">remove_noexcept_t</span><span class="special"><</span><span class="keyword">int</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">>,</span> 8059 <span class="keyword">int</span><span class="special">()</span> 8060<span class="special">>{},</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">(&)()</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">(&)()</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">(&)()</span></code> 8232 </p> 8233 </td> 8234<td> 8235 <p> 8236 <code class="computeroutput"><span class="keyword">int</span><span class="special">(&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 8285<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">ts</span><span class="special">>;</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"><</span><span class="identifier">not_ts</span><span class="special">,</span> <span class="identifier">ts_removed</span><span class="special">>{},</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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">(&)(...)</span></code> 8410 </p> 8411 </td> 8412<td> 8413 <p> 8414 <code class="computeroutput"><span class="keyword">int</span><span class="special">(&)()</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">&</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">&</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">&&</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">&&</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 8543<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">f</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</span><span class="identifier">fp</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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">(&)(</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">(&)(</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"><</span><span class="identifier">fr</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</span><span class="identifier">pmf</span><span class="special">>;</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"><</span><span class="identifier">test</span><span class="special">,</span> <span class="identifier">expect</span><span class="special">>::</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"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">></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"><</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">></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">*(&)()</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"><</span><span class="identifier">type_traits</span><span class="special">></span> 8743<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">T</span><span class="special">>;</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"><</span><span class="identifier">expect</span><span class="special">,</span> <span class="identifier">result</span><span class="special">>{},</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"><</span><span class="keyword">int</span><span class="special">()>();</span> 8760 <span class="identifier">test</span><span class="special"><</span><span class="keyword">int</span><span class="special">(*)()>();</span> 8761 <span class="identifier">test</span><span class="special"><</span><span class="keyword">int</span><span class="special">(&)()>();</span> 8762 <span class="identifier">test</span><span class="special"><</span><span class="keyword">int</span><span class="special">()</span> <span class="keyword">const</span><span class="special">>();</span> 8763 <span class="identifier">test</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> 8764 8765 <span class="keyword">auto</span> <span class="identifier">x</span> <span class="special">=</span> <span class="special">[]()</span> <span class="special">-></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"><</span><span class="keyword">decltype</span><span class="special">(</span><span class="identifier">x</span><span class="special">)>();</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