1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>CallableTraits</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="next" href="callable_traits/reference.html" title="Reference Documentation"> 9</head> 10<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 11<table cellpadding="2" width="100%"><tr> 12<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td> 13<td align="center"><a href="../../../../index.html">Home</a></td> 14<td align="center"><a href="../../../../libs/libraries.htm">Libraries</a></td> 15<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 16<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 17<td align="center"><a href="../../../../more/index.htm">More</a></td> 18</tr></table> 19<hr> 20<div class="spirit-nav"><a accesskey="n" href="callable_traits/reference.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div> 21<div lang="en" class="article"> 22<div class="titlepage"> 23<div> 24<div><h2 class="title"> 25<a name="callable_traits"></a>CallableTraits</h2></div> 26<div><div class="authorgroup"><div class="author"><h3 class="author"> 27<span class="firstname">Barrett</span> <span class="surname">Adair</span> 28</h3></div></div></div> 29<div><p class="copyright">Copyright © 2016-2018 Barrett Adair</p></div> 30<div><div class="legalnotice"> 31<a name="callable_traits.legal"></a><p> 32 Distributed under the Boost Software License, Version 1.0. (See accompanying 33 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>) 34 </p> 35</div></div> 36</div> 37<hr> 38</div> 39<div class="toc"> 40<p><b>Table of Contents</b></p> 41<dl class="toc"> 42<dt><span class="section"><a href="index.html#callable_traits.introduction">Overview</a></span></dt> 43<dd><dl> 44<dt><span class="section"><a href="index.html#callable_traits.introduction.motivation">Motivation</a></span></dt> 45<dt><span class="section"><a href="index.html#callable_traits.introduction.boost_function_types">Regarding 46 <code class="literal">Boost.FunctionTypes</code></a></span></dt> 47<dt><span class="section"><a href="index.html#callable_traits.introduction.compatibility">Compatibility</a></span></dt> 48</dl></dd> 49<dt><span class="section"><a href="callable_traits/reference.html">Reference Documentation</a></span></dt> 50<dd><dl> 51<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_add_member_const">add_member_const</a></span></dt> 52<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_add_member_cv">add_member_cv</a></span></dt> 53<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_add_member_lvalue_reference">add_member_lvalue_reference</a></span></dt> 54<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_add_member_rvalue_reference">add_member_rvalue_reference</a></span></dt> 55<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_add_member_volatile">add_member_volatile</a></span></dt> 56<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_add_noexcept">add_noexcept</a></span></dt> 57<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_add_transaction_safe">add_transaction_safe</a></span></dt> 58<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_add_varargs">add_varargs</a></span></dt> 59<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_apply_member_pointer">apply_member_pointer</a></span></dt> 60<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_apply_return">apply_return</a></span></dt> 61<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_args">args</a></span></dt> 62<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_class_of">class_of</a></span></dt> 63<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_function_type">function_type</a></span></dt> 64<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_has_member_qualifiers">has_member_qualifiers</a></span></dt> 65<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_has_varargs">has_varargs</a></span></dt> 66<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_has_void_return">has_void_return</a></span></dt> 67<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_is_const_member">is_const_member</a></span></dt> 68<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_is_cv_member">is_cv_member</a></span></dt> 69<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_is_invocable">is_invocable</a></span></dt> 70<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_is_lvalue_reference_member">is_lvalue_reference_member</a></span></dt> 71<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_is_reference_member">is_reference_member</a></span></dt> 72<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_is_rvalue_reference_member">is_rvalue_reference_member</a></span></dt> 73<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_is_noexcept">is_noexcept</a></span></dt> 74<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_is_transaction_safe">is_transaction_safe</a></span></dt> 75<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_is_volatile_member">is_volatile_member</a></span></dt> 76<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_qualified_class_of">qualified_class_of</a></span></dt> 77<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_const">remove_member_const</a></span></dt> 78<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_cv">remove_member_cv</a></span></dt> 79<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_reference">remove_member_reference</a></span></dt> 80<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_volatile">remove_member_volatile</a></span></dt> 81<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_remove_noexcept">remove_noexcept</a></span></dt> 82<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_remove_transaction_safe">remove_transaction_safe</a></span></dt> 83<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_remove_varargs">remove_varargs</a></span></dt> 84<dt><span class="section"><a href="callable_traits/reference.html#callable_traits.reference.ref_return_type">return_type</a></span></dt> 85</dl></dd> 86<dt><span class="section"><a href="callable_traits/faq.html">FAQ</a></span></dt> 87<dt><span class="section"><a href="callable_traits/building.html">Building the test suite</a></span></dt> 88<dt><span class="section"><a href="callable_traits/contact.html">Contact</a></span></dt> 89<dt><span class="section"><a href="callable_traits/acknowledgements.html">Acknowledgements</a></span></dt> 90</dl> 91</div> 92<div class="section"> 93<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 94<a name="callable_traits.introduction"></a><a class="link" href="index.html#callable_traits.introduction" title="Overview">Overview</a> 95</h2></div></div></div> 96<div class="toc"><dl class="toc"> 97<dt><span class="section"><a href="index.html#callable_traits.introduction.motivation">Motivation</a></span></dt> 98<dt><span class="section"><a href="index.html#callable_traits.introduction.boost_function_types">Regarding 99 <code class="literal">Boost.FunctionTypes</code></a></span></dt> 100<dt><span class="section"><a href="index.html#callable_traits.introduction.compatibility">Compatibility</a></span></dt> 101</dl></div> 102<p> 103 <code class="literal">Boost.CallableTraits</code> is a C++11 header-only library for 104 the inspection, synthesis, and decomposition of callable types. <code class="literal">Boost.CallableTraits</code> 105 aims to be the "complete type manipulation facility for function types" 106 mentioned in the final paragraph of C++17 proposal <a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2015/p0172r0.html" target="_top">p0172</a>, 107 and removes the need for template specializations for different function signatures. 108 C++17 <code class="computeroutput"><span class="keyword">noexcept</span></code> and the Transactional 109 Memory TS are also supported if available. 110 </p> 111<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></span> 112<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">tuple</span><span class="special">></span> 113<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> 114 115<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> 116 117<span class="comment">// This function template helps keep our example code neat</span> 118<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">A</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">B</span><span class="special">></span> 119<span class="keyword">void</span> <span class="identifier">assert_same</span><span class="special">(){</span> <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">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">>::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span> <span class="special">}</span> 120 121<span class="comment">// foo is a function object</span> 122<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">{</span> 123 <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">char</span><span class="special">,</span> <span class="keyword">float</span><span class="special">)</span> <span class="keyword">const</span> <span class="special">{}</span> 124<span class="special">};</span> 125 126<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span> 127 128 <span class="comment">// Use args_t to retrieve a parameter list as a std::tuple:</span> 129 <span class="identifier">assert_same</span><span class="special"><</span> 130 <span class="identifier">ct</span><span class="special">::</span><span class="identifier">args_t</span><span class="special"><</span><span class="identifier">foo</span><span class="special">>,</span> 131 <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">char</span><span class="special">,</span> <span class="keyword">float</span><span class="special">></span> 132 <span class="special">>();</span> 133 134 <span class="comment">// has_void_return lets us perform a quick check for a void return type</span> 135 <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="identifier">foo</span><span class="special">>::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span> 136 137 <span class="comment">// Detect C-style variadics (ellipses) in a signature (e.g. printf)</span> 138 <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="identifier">foo</span><span class="special">>::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span> 139 140 <span class="comment">// pmf is a pointer-to-member function: void (foo::*)(int, char, float) const</span> 141 <span class="keyword">using</span> <span class="identifier">pmf</span> <span class="special">=</span> <span class="keyword">decltype</span><span class="special">(&</span><span class="identifier">foo</span><span class="special">::</span><span class="keyword">operator</span><span class="special">());</span> 142 143 <span class="comment">// remove_member_const_t lets you remove the const member qualifier</span> 144 <span class="identifier">assert_same</span><span class="special"><</span> 145 <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> 146 <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">char</span><span class="special">,</span> <span class="keyword">float</span><span class="special">)</span> <span class="comment">/*no const!*/</span> 147 <span class="special">>();</span> 148 149 <span class="comment">// Conversely, add_member_const_t adds a const member qualifier</span> 150 <span class="identifier">assert_same</span><span class="special"><</span> 151 <span class="identifier">pmf</span><span class="special">,</span> 152 <span class="identifier">ct</span><span class="special">::</span><span class="identifier">add_member_const_t</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">char</span><span class="special">,</span> <span class="keyword">float</span><span class="special">)></span> 153 <span class="special">>();</span> 154 155 <span class="comment">// is_const_member_v checks for the presence of member const</span> 156 <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="identifier">pmf</span><span class="special">>::</span><span class="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span> 157<span class="special">}</span> 158</pre> 159<div class="section"> 160<div class="titlepage"><div><div><h3 class="title"> 161<a name="callable_traits.introduction.motivation"></a><a class="link" href="index.html#callable_traits.introduction.motivation" title="Motivation">Motivation</a> 162</h3></div></div></div> 163<div class="blockquote"><blockquote class="blockquote"> 164<p> 165 <span class="bold"><strong><span class="emphasis"><em><span class="quote">“<span class="quote">Don't try to write helper code to 166 detect PMFs/PMDs and dispatch on them -- it is an <span class="underline">absolute 167 nightmare</span>. PMF types are the worst types by far in the core 168 language.</span>”</span></em></span></strong></span> 169 </p> 170<p> 171 -- Stephan T. Lavavej, CppCon 2015, <a href="https://www.youtube.com/watch?v=zt7ThwVfap0&t=11m40s" target="_top">"functional: 172 What's New, And Proper Usage"</a> 173 </p> 174</blockquote></div> 175<p> 176 Consider for a moment the code below, which defines all 48 template specializations 177 necessary to specialize for every valid function type in pure C++17: 178 </p> 179<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">struct</span> <span class="identifier">foo</span><span class="special">;</span> 180 181<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)></span> <span class="special">{};</span> 182<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="special">&></span> <span class="special">{};</span> 183<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="special">&&></span> <span class="special">{};</span> 184<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">const</span><span class="special">></span> <span class="special">{};</span> 185<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">const</span> <span class="special">&></span> <span class="special">{};</span> 186<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">const</span> <span class="special">&&></span> <span class="special">{};</span> 187<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">volatile</span><span class="special">></span> <span class="special">{};</span> 188<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">volatile</span> <span class="special">&></span> <span class="special">{};</span> 189<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">volatile</span> <span class="special">&&></span> <span class="special">{};</span> 190<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">const</span> <span class="keyword">volatile</span><span class="special">></span> <span class="special">{};</span> 191<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="special">&></span> <span class="special">{};</span> 192<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="special">&&></span> <span class="special">{};</span> 193<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)></span> <span class="special">{};</span> 194<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="special">&></span> <span class="special">{};</span> 195<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="special">&&></span> <span class="special">{};</span> 196<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">const</span><span class="special">></span> <span class="special">{};</span> 197<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">const</span> <span class="special">&></span> <span class="special">{};</span> 198<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">const</span> <span class="special">&&></span> <span class="special">{};</span> 199<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">volatile</span><span class="special">></span> <span class="special">{};</span> 200<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">volatile</span> <span class="special">&></span> <span class="special">{};</span> 201<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">volatile</span> <span class="special">&&></span> <span class="special">{};</span> 202<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">const</span> <span class="keyword">volatile</span><span class="special">></span> <span class="special">{};</span> 203<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="special">&></span> <span class="special">{};</span> 204<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="special">&&></span> <span class="special">{};</span> 205<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 206<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="special">&</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 207<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="special">&&</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 208<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 209<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">const</span> <span class="special">&</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 210<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">const</span> <span class="special">&&</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 211<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">volatile</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 212<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">volatile</span> <span class="special">&</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 213<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">volatile</span> <span class="special">&&</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 214<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 215<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="special">&</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 216<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...)</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="special">&&</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 217<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 218<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="special">&</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 219<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="special">&&</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 220<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 221<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">const</span> <span class="special">&</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 222<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">const</span> <span class="special">&&</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 223<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">volatile</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 224<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">volatile</span> <span class="special">&</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 225<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">volatile</span> <span class="special">&&</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 226<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 227<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="special">&</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 228<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Return</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">struct</span> <span class="identifier">foo</span><span class="special"><</span><span class="identifier">Return</span><span class="special">(</span><span class="identifier">Args</span><span class="special">...,</span> <span class="special">...)</span> <span class="keyword">const</span> <span class="keyword">volatile</span> <span class="special">&&</span> <span class="keyword">noexcept</span><span class="special">></span> <span class="special">{};</span> 229</pre> 230<p> 231 Things get even more complicated with member function pointers, function 232 pointers, function references, function objects, and <code class="computeroutput"><span class="identifier">transaction_safe</span></code>. 233 </p> 234<p> 235 Granted, use cases for such obscure specializations are vitually nonexistent 236 in run-of-the-mill application codebases. Even in library code, these are 237 exceedingly rare. However, there are a handful of metaprogramming scenarios 238 that can only be solved with this kind of template "spam". Writing, 239 testing, and maintaining such code is tedious and costly. 240 </p> 241<p> 242 <code class="literal">Boost.CallableTraits</code> offers a final and decisive library-level 243 solution to this problem, and removes the need for these specializations 244 entirely (platform-specific calling conventions notwithstanding). 245 </p> 246</div> 247<div class="section"> 248<div class="titlepage"><div><div><h3 class="title"> 249<a name="callable_traits.introduction.boost_function_types"></a><a class="link" href="index.html#callable_traits.introduction.boost_function_types" title="Regarding Boost.FunctionTypes">Regarding 250 <code class="literal">Boost.FunctionTypes</code></a> 251</h3></div></div></div> 252<p> 253 The features in <code class="literal">Boost.CallableTraits</code> largely overlap with 254 <a href="http://www.boost.org/doc/libs/1_61_0/libs/function_types/doc/html/index.html" target="_top"><code class="literal">Boost.FunctionTypes</code></a>. 255 Here are some reasons why you might prefer <code class="literal">Boost.CallableTraits</code>: 256 </p> 257<div class="orderedlist"><ol class="orderedlist" type="1"> 258<li class="listitem"> 259 <code class="literal">Boost.FunctionTypes</code> is tightly coupled to <a href="http://www.boost.org/doc/libs/1_64_0/libs/mpl/doc/index.html" target="_top"><code class="literal">Boost.MPL</code></a> 260 sequences, while <code class="literal">Boost.CallableTraits</code> has no dependencies 261 other than the standard library. 262 </li> 263<li class="listitem"> 264 <code class="literal">Boost.CallableTraits</code> targets C++11 and later: 265 <div class="orderedlist"><ol class="orderedlist" type="a"> 266<li class="listitem"> 267 <code class="literal">Boost.CallableTraits</code> treats function objects/lambdas 268 as first-class citizens. 269 </li> 270<li class="listitem"> 271 <code class="literal">Boost.CallableTraits</code> supports lvalue/rvalue 272 reference member qualifiers. 273 </li> 274<li class="listitem"> 275 <code class="literal">Boost.CallableTraits</code> supports <code class="computeroutput"><span class="keyword">noexcept</span></code> and <code class="computeroutput"><span class="identifier">transaction_safe</span></code>. 276 </li> 277</ol></div> 278 </li> 279<li class="listitem"> 280 <code class="literal">Boost.FunctionTypes</code> does not attempt to factor all 281 callable types into a unified, <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>-aware 282 interface. 283 </li> 284<li class="listitem"> 285 <code class="literal">Boost.FunctionTypes</code> relies heavily on "tag" 286 types, while <code class="literal">Boost.CallableTraits</code> follows the style 287 of <type_traits> instead. Supporting C++11 and later in <code class="literal">Boost.FunctionTypes</code> 288 would have required significant proliferation of these tags. 289 </li> 290</ol></div> 291<p> 292 For example, here is how to remove member <code class="computeroutput"><span class="keyword">const</span></code> 293 from a member function pointer type in the <code class="literal">Boost.FunctionTypes</code> 294 library: 295 </p> 296<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></span> 297<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">function_types</span><span class="special">/</span><span class="identifier">components</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 298<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">function_types</span><span class="special">/</span><span class="identifier">member_function_pointer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 299 300<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">{</span> 301 <span class="keyword">void</span> <span class="identifier">bar</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">{}</span> 302<span class="special">};</span> 303 304<span class="keyword">using</span> <span class="identifier">const_removed</span> <span class="special">=</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">function_types</span><span class="special">::</span><span class="identifier">member_function_pointer</span><span class="special"><</span> 305 <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">function_types</span><span class="special">::</span><span class="identifier">components</span><span class="special"><</span><span class="keyword">decltype</span><span class="special">(&</span><span class="identifier">foo</span><span class="special">::</span><span class="identifier">bar</span><span class="special">)>::</span><span class="identifier">types</span><span class="special">,</span> 306 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">function_types</span><span class="special">::</span><span class="identifier">non_const</span><span class="special">>::</span><span class="identifier">type</span><span class="special">;</span> 307 308<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">const_removed</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="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span> 309 310<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(){}</span> 311</pre> 312<p> 313 <code class="literal">Boost.CallableTraits</code> makes this easier: 314 </p> 315<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></span> 316<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> 317 318<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">{</span> 319 <span class="keyword">void</span> <span class="identifier">bar</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">{}</span> 320<span class="special">};</span> 321 322<span class="keyword">using</span> <span class="identifier">const_removed</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_t</span><span class="special"><</span><span class="keyword">decltype</span><span class="special">(&</span><span class="identifier">foo</span><span class="special">::</span><span class="identifier">bar</span><span class="special">)>;</span> 323 324<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">const_removed</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="identifier">value</span><span class="special">,</span> <span class="string">""</span><span class="special">);</span> 325 326<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(){}</span> 327</pre> 328<p> 329 The <code class="literal">Boost.FunctionTypes</code> library includes an excellent 330 <a href="http://www.boost.org/doc/libs/1_64_0/libs/function_types/example/interface_example.cpp" target="_top">example</a> 331 for generating type-erased interfaces (implementation <a href="http://www.boost.org/doc/libs/1_64_0/libs/function_types/example/interface.hpp" target="_top">here</a>). 332 This example was <a href="https://github.com/badair/eraserface/blob/master/include/eraserface/eraserface.hpp" target="_top">re-implemented</a> 333 using <code class="literal">Boost.CallableTraits</code> to yield a <a href="https://github.com/badair/eraserface/blob/master/example/basic_example.cpp" target="_top">slightly 334 more intuitive interface</a>. 335 </p> 336<p> 337 <code class="literal">Boost.FunctionTypes</code> is a fine library, but its interface 338 left room for improvement. 339 </p> 340</div> 341<div class="section"> 342<div class="titlepage"><div><div><h3 class="title"> 343<a name="callable_traits.introduction.compatibility"></a><a class="link" href="index.html#callable_traits.introduction.compatibility" title="Compatibility">Compatibility</a> 344</h3></div></div></div> 345<p> 346 <code class="literal">Boost.CallableTraits</code> supports on GCC 4.7.4+, Clang 3.5.2+, 347 XCode 6.4+, and Visual Studio 2015+. Continuous integration is managed on 348 <a href="https://ci.appveyor.com/project/boostorg/callable-traits" target="_top">Appveyor</a> 349 for Visual Studio, and on <a href="https://travis-ci.org/boostorg/callable_traits/builds" target="_top">Travis</a> 350 for everything else. The Intel C++ Compiler is not officially supported yet, 351 although the 2017 version for Linux does pass a handful of test cases. 352 </p> 353<div class="table"> 354<a name="callable_traits.introduction.compatibility.gcc_support"></a><p class="title"><b>Table 1. GCC Support</b></p> 355<div class="table-contents"><table class="table" summary="GCC Support"> 356<colgroup> 357<col> 358<col> 359<col> 360<col> 361<col> 362<col> 363<col> 364<col> 365</colgroup> 366<thead><tr> 367<th> 368 <p> 369 feature 370 </p> 371 </th> 372<th> 373 <p> 374 GCC 8.2.0 375 </p> 376 </th> 377<th> 378 <p> 379 GCC 7.3.0 380 </p> 381 </th> 382<th> 383 <p> 384 GCC 6.3.0 385 </p> 386 </th> 387<th> 388 <p> 389 GCC 5.4.0 390 </p> 391 </th> 392<th> 393 <p> 394 GCC 4.9.2 395 </p> 396 </th> 397<th> 398 <p> 399 GCC 4.8.2 400 </p> 401 </th> 402<th> 403 <p> 404 GCC 4.7.4 405 </p> 406 </th> 407</tr></thead> 408<tbody> 409<tr> 410<td> 411 <p> 412 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_const" title="add_member_const"><code class="literal">add_member_const</code></a> 413 </p> 414 </td> 415<td> 416 <p> 417 <span class="green">c++11</span> 418 </p> 419 </td> 420<td> 421 <p> 422 <span class="green">c++11</span> 423 </p> 424 </td> 425<td> 426 <p> 427 <span class="green">c++11</span> 428 </p> 429 </td> 430<td> 431 <p> 432 <span class="green">c++11</span> 433 </p> 434 </td> 435<td> 436 <p> 437 <span class="green">c++11</span> 438 </p> 439 </td> 440<td> 441 <p> 442 <span class="gold">c++11</span> (no abominables) 443 </p> 444 </td> 445<td> 446 <p> 447 <span class="gold">c++11</span> (no abominables) 448 </p> 449 </td> 450</tr> 451<tr> 452<td> 453 <p> 454 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_cv" title="add_member_cv"><code class="literal">add_member_cv</code></a> 455 </p> 456 </td> 457<td> 458 <p> 459 <span class="green">c++11</span> 460 </p> 461 </td> 462<td> 463 <p> 464 <span class="green">c++11</span> 465 </p> 466 </td> 467<td> 468 <p> 469 <span class="green">c++11</span> 470 </p> 471 </td> 472<td> 473 <p> 474 <span class="green">c++11</span> 475 </p> 476 </td> 477<td> 478 <p> 479 <span class="green">c++11</span> 480 </p> 481 </td> 482<td> 483 <p> 484 <span class="gold">c++11</span> (no abominables) 485 </p> 486 </td> 487<td> 488 <p> 489 <span class="gold">c++11</span> (no abominables) 490 </p> 491 </td> 492</tr> 493<tr> 494<td> 495 <p> 496 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_lvalue_reference" title="add_member_lvalue_reference"><code class="literal">add_member_lvalue_reference</code></a> 497 </p> 498 </td> 499<td> 500 <p> 501 <span class="green">c++11</span> 502 </p> 503 </td> 504<td> 505 <p> 506 <span class="green">c++11</span> 507 </p> 508 </td> 509<td> 510 <p> 511 <span class="green">c++11</span> 512 </p> 513 </td> 514<td> 515 <p> 516 <span class="green">c++11</span> 517 </p> 518 </td> 519<td> 520 <p> 521 <span class="green">c++11</span> 522 </p> 523 </td> 524<td> 525 <p> 526 <span class="red">static_assert fails on instantiation</span> 527 </p> 528 </td> 529<td> 530 <p> 531 <span class="red">static_assert fails on instantiation</span> 532 </p> 533 </td> 534</tr> 535<tr> 536<td> 537 <p> 538 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_rvalue_reference" title="add_member_rvalue_reference"><code class="literal">add_member_rvalue_reference</code></a> 539 </p> 540 </td> 541<td> 542 <p> 543 <span class="green">c++11</span> 544 </p> 545 </td> 546<td> 547 <p> 548 <span class="green">c++11</span> 549 </p> 550 </td> 551<td> 552 <p> 553 <span class="green">c++11</span> 554 </p> 555 </td> 556<td> 557 <p> 558 <span class="green">c++11</span> 559 </p> 560 </td> 561<td> 562 <p> 563 <span class="green">c++11</span> 564 </p> 565 </td> 566<td> 567 <p> 568 <span class="red">static_assert fails on instantiation</span> 569 </p> 570 </td> 571<td> 572 <p> 573 <span class="red">static_assert fails on instantiation</span> 574 </p> 575 </td> 576</tr> 577<tr> 578<td> 579 <p> 580 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_volatile" title="add_member_volatile"><code class="literal">add_member_volatile</code></a> 581 </p> 582 </td> 583<td> 584 <p> 585 <span class="green">c++11</span> 586 </p> 587 </td> 588<td> 589 <p> 590 <span class="green">c++11</span> 591 </p> 592 </td> 593<td> 594 <p> 595 <span class="green">c++11</span> 596 </p> 597 </td> 598<td> 599 <p> 600 <span class="green">c++11</span> 601 </p> 602 </td> 603<td> 604 <p> 605 <span class="green">c++11</span> 606 </p> 607 </td> 608<td> 609 <p> 610 <span class="gold">c++11</span> (no abominables) 611 </p> 612 </td> 613<td> 614 <p> 615 <span class="gold">c++11</span> (no abominables) 616 </p> 617 </td> 618</tr> 619<tr> 620<td> 621 <p> 622 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_noexcept" title="add_noexcept"><code class="literal">add_noexcept</code></a> 623 </p> 624 </td> 625<td> 626 <p> 627 <span class="green">c++17</span> 628 </p> 629 </td> 630<td> 631 <p> 632 <span class="green">c++17</span> 633 </p> 634 </td> 635<td> 636 <p> 637 <span class="green">c++17</span> 638 </p> 639 </td> 640<td> 641 <p> 642 <span class="red">static_assert fails on instantiation</span> 643 </p> 644 </td> 645<td> 646 <p> 647 <span class="red">static_assert fails on instantiation</span> 648 </p> 649 </td> 650<td> 651 <p> 652 <span class="red">static_assert fails on instantiation</span> 653 </p> 654 </td> 655<td> 656 <p> 657 <span class="red">static_assert fails on instantiation</span> 658 </p> 659 </td> 660</tr> 661<tr> 662<td> 663 <p> 664 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_transaction_safe" title="add_transaction_safe"><code class="literal">add_transaction_safe</code></a> 665 </p> 666 </td> 667<td> 668 <p> 669 <span class="gold">c++17</span> (requires -fgnu-tm) 670 </p> 671 </td> 672<td> 673 <p> 674 <span class="gold">c++17</span> (requires -fgnu-tm) 675 </p> 676 </td> 677<td> 678 <p> 679 <span class="gold">c++17</span> (requires -fgnu-tm) 680 </p> 681 </td> 682<td> 683 <p> 684 <span class="red">static_assert fails on instantiation</span> 685 </p> 686 </td> 687<td> 688 <p> 689 <span class="red">static_assert fails on instantiation</span> 690 </p> 691 </td> 692<td> 693 <p> 694 <span class="red">static_assert fails on instantiation</span> 695 </p> 696 </td> 697<td> 698 <p> 699 <span class="red">static_assert fails on instantiation</span> 700 </p> 701 </td> 702</tr> 703<tr> 704<td> 705 <p> 706 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_varargs" title="add_varargs"><code class="literal">add_varargs</code></a> 707 </p> 708 </td> 709<td> 710 <p> 711 <span class="green">c++11</span> 712 </p> 713 </td> 714<td> 715 <p> 716 <span class="green">c++11</span> 717 </p> 718 </td> 719<td> 720 <p> 721 <span class="green">c++11</span> 722 </p> 723 </td> 724<td> 725 <p> 726 <span class="green">c++11</span> 727 </p> 728 </td> 729<td> 730 <p> 731 <span class="green">c++11</span> 732 </p> 733 </td> 734<td> 735 <p> 736 <span class="green">c++11</span> 737 </p> 738 </td> 739<td> 740 <p> 741 <span class="green">c++11</span> 742 </p> 743 </td> 744</tr> 745<tr> 746<td> 747 <p> 748 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_apply_member_pointer" title="apply_member_pointer"><code class="literal">apply_member_pointer</code></a> 749 </p> 750 </td> 751<td> 752 <p> 753 <span class="green">c++11</span> 754 </p> 755 </td> 756<td> 757 <p> 758 <span class="green">c++11</span> 759 </p> 760 </td> 761<td> 762 <p> 763 <span class="green">c++11</span> 764 </p> 765 </td> 766<td> 767 <p> 768 <span class="green">c++11</span> 769 </p> 770 </td> 771<td> 772 <p> 773 <span class="green">c++11</span> 774 </p> 775 </td> 776<td> 777 <p> 778 <span class="green">c++11</span> 779 </p> 780 </td> 781<td> 782 <p> 783 <span class="green">c++11</span> 784 </p> 785 </td> 786</tr> 787<tr> 788<td> 789 <p> 790 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_apply_return" title="apply_return"><code class="literal">apply_return</code></a> 791 </p> 792 </td> 793<td> 794 <p> 795 <span class="green">c++11</span> 796 </p> 797 </td> 798<td> 799 <p> 800 <span class="green">c++11</span> 801 </p> 802 </td> 803<td> 804 <p> 805 <span class="green">c++11</span> 806 </p> 807 </td> 808<td> 809 <p> 810 <span class="green">c++11</span> 811 </p> 812 </td> 813<td> 814 <p> 815 <span class="green">c++11</span> 816 </p> 817 </td> 818<td> 819 <p> 820 <span class="green">c++11</span> 821 </p> 822 </td> 823<td> 824 <p> 825 <span class="green">c++11</span> 826 </p> 827 </td> 828</tr> 829<tr> 830<td> 831 <p> 832 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_args" title="args"><code class="literal">args</code></a> 833 </p> 834 </td> 835<td> 836 <p> 837 <span class="green">c++11</span> 838 </p> 839 </td> 840<td> 841 <p> 842 <span class="green">c++11</span> 843 </p> 844 </td> 845<td> 846 <p> 847 <span class="green">c++11</span> 848 </p> 849 </td> 850<td> 851 <p> 852 <span class="green">c++11</span> 853 </p> 854 </td> 855<td> 856 <p> 857 <span class="green">c++11</span> 858 </p> 859 </td> 860<td> 861 <p> 862 <span class="green">c++11</span> 863 </p> 864 </td> 865<td> 866 <p> 867 <span class="green">c++11</span> 868 </p> 869 </td> 870</tr> 871<tr> 872<td> 873 <p> 874 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_class_of" title="class_of"><code class="literal">class_of</code></a> 875 </p> 876 </td> 877<td> 878 <p> 879 <span class="green">c++11</span> 880 </p> 881 </td> 882<td> 883 <p> 884 <span class="green">c++11</span> 885 </p> 886 </td> 887<td> 888 <p> 889 <span class="green">c++11</span> 890 </p> 891 </td> 892<td> 893 <p> 894 <span class="green">c++11</span> 895 </p> 896 </td> 897<td> 898 <p> 899 <span class="green">c++11</span> 900 </p> 901 </td> 902<td> 903 <p> 904 <span class="green">c++11</span> 905 </p> 906 </td> 907<td> 908 <p> 909 <span class="green">c++11</span> 910 </p> 911 </td> 912</tr> 913<tr> 914<td> 915 <p> 916 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_function_type" title="function_type"><code class="literal">function_type</code></a> 917 </p> 918 </td> 919<td> 920 <p> 921 <span class="green">c++11</span> 922 </p> 923 </td> 924<td> 925 <p> 926 <span class="green">c++11</span> 927 </p> 928 </td> 929<td> 930 <p> 931 <span class="green">c++11</span> 932 </p> 933 </td> 934<td> 935 <p> 936 <span class="green">c++11</span> 937 </p> 938 </td> 939<td> 940 <p> 941 <span class="green">c++11</span> 942 </p> 943 </td> 944<td> 945 <p> 946 <span class="green">c++11</span> 947 </p> 948 </td> 949<td> 950 <p> 951 <span class="green">c++11</span> 952 </p> 953 </td> 954</tr> 955<tr> 956<td> 957 <p> 958 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_has_member_qualifiers" title="has_member_qualifiers"><code class="literal">has_member_qualifiers</code></a> 959 </p> 960 </td> 961<td> 962 <p> 963 <span class="green">c++11</span> 964 </p> 965 </td> 966<td> 967 <p> 968 <span class="green">c++11</span> 969 </p> 970 </td> 971<td> 972 <p> 973 <span class="green">c++11</span> 974 </p> 975 </td> 976<td> 977 <p> 978 <span class="green">c++11</span> 979 </p> 980 </td> 981<td> 982 <p> 983 <span class="green">c++11</span> 984 </p> 985 </td> 986<td> 987 <p> 988 <span class="gold">c++11</span> (no abominables) 989 </p> 990 </td> 991<td> 992 <p> 993 <span class="gold">c++11</span> (no abominables) 994 </p> 995 </td> 996</tr> 997<tr> 998<td> 999 <p> 1000 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_has_varargs" title="has_varargs"><code class="literal">has_varargs</code></a> 1001 </p> 1002 </td> 1003<td> 1004 <p> 1005 <span class="green">c++11</span> 1006 </p> 1007 </td> 1008<td> 1009 <p> 1010 <span class="green">c++11</span> 1011 </p> 1012 </td> 1013<td> 1014 <p> 1015 <span class="green">c++11</span> 1016 </p> 1017 </td> 1018<td> 1019 <p> 1020 <span class="green">c++11</span> 1021 </p> 1022 </td> 1023<td> 1024 <p> 1025 <span class="green">c++11</span> 1026 </p> 1027 </td> 1028<td> 1029 <p> 1030 <span class="green">c++11</span> 1031 </p> 1032 </td> 1033<td> 1034 <p> 1035 <span class="green">c++11</span> 1036 </p> 1037 </td> 1038</tr> 1039<tr> 1040<td> 1041 <p> 1042 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_has_void_return" title="has_void_return"><code class="literal">has_void_return</code></a> 1043 </p> 1044 </td> 1045<td> 1046 <p> 1047 <span class="green">c++11</span> 1048 </p> 1049 </td> 1050<td> 1051 <p> 1052 <span class="green">c++11</span> 1053 </p> 1054 </td> 1055<td> 1056 <p> 1057 <span class="green">c++11</span> 1058 </p> 1059 </td> 1060<td> 1061 <p> 1062 <span class="green">c++11</span> 1063 </p> 1064 </td> 1065<td> 1066 <p> 1067 <span class="green">c++11</span> 1068 </p> 1069 </td> 1070<td> 1071 <p> 1072 <span class="green">c++11</span> 1073 </p> 1074 </td> 1075<td> 1076 <p> 1077 <span class="green">c++11</span> 1078 </p> 1079 </td> 1080</tr> 1081<tr> 1082<td> 1083 <p> 1084 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_const_member" title="is_const_member"><code class="literal">is_const_member</code></a> 1085 </p> 1086 </td> 1087<td> 1088 <p> 1089 <span class="green">c++11</span> 1090 </p> 1091 </td> 1092<td> 1093 <p> 1094 <span class="green">c++11</span> 1095 </p> 1096 </td> 1097<td> 1098 <p> 1099 <span class="green">c++11</span> 1100 </p> 1101 </td> 1102<td> 1103 <p> 1104 <span class="green">c++11</span> 1105 </p> 1106 </td> 1107<td> 1108 <p> 1109 <span class="green">c++11</span> 1110 </p> 1111 </td> 1112<td> 1113 <p> 1114 <span class="gold">c++11</span> (no abominables) 1115 </p> 1116 </td> 1117<td> 1118 <p> 1119 <span class="gold">c++11</span> (no abominables) 1120 </p> 1121 </td> 1122</tr> 1123<tr> 1124<td> 1125 <p> 1126 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_cv_member" title="is_cv_member"><code class="literal">is_cv_member</code></a> 1127 </p> 1128 </td> 1129<td> 1130 <p> 1131 <span class="green">c++11</span> 1132 </p> 1133 </td> 1134<td> 1135 <p> 1136 <span class="green">c++11</span> 1137 </p> 1138 </td> 1139<td> 1140 <p> 1141 <span class="green">c++11</span> 1142 </p> 1143 </td> 1144<td> 1145 <p> 1146 <span class="green">c++11</span> 1147 </p> 1148 </td> 1149<td> 1150 <p> 1151 <span class="green">c++11</span> 1152 </p> 1153 </td> 1154<td> 1155 <p> 1156 <span class="gold">c++11</span> (no abominables) 1157 </p> 1158 </td> 1159<td> 1160 <p> 1161 <span class="gold">c++11</span> (no abominables) 1162 </p> 1163 </td> 1164</tr> 1165<tr> 1166<td> 1167 <p> 1168 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_invocable" title="is_invocable"><code class="literal">is_invocable</code></a> 1169 </p> 1170 </td> 1171<td> 1172 <p> 1173 <span class="green">c++11</span> 1174 </p> 1175 </td> 1176<td> 1177 <p> 1178 <span class="green">c++11</span> 1179 </p> 1180 </td> 1181<td> 1182 <p> 1183 <span class="green">c++11</span> 1184 </p> 1185 </td> 1186<td> 1187 <p> 1188 <span class="green">c++11</span> 1189 </p> 1190 </td> 1191<td> 1192 <p> 1193 <span class="green">c++11</span> 1194 </p> 1195 </td> 1196<td> 1197 <p> 1198 unknown 1199 </p> 1200 </td> 1201<td> 1202 <p> 1203 unknown 1204 </p> 1205 </td> 1206</tr> 1207<tr> 1208<td> 1209 <p> 1210 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_lvalue_reference_member" title="is_lvalue_reference_member"><code class="literal">is_lvalue_reference_member</code></a> 1211 </p> 1212 </td> 1213<td> 1214 <p> 1215 <span class="green">c++11</span> 1216 </p> 1217 </td> 1218<td> 1219 <p> 1220 <span class="green">c++11</span> 1221 </p> 1222 </td> 1223<td> 1224 <p> 1225 <span class="green">c++11</span> 1226 </p> 1227 </td> 1228<td> 1229 <p> 1230 <span class="green">c++11</span> 1231 </p> 1232 </td> 1233<td> 1234 <p> 1235 <span class="green">c++11</span> 1236 </p> 1237 </td> 1238<td> 1239 <p> 1240 <span class="gold">c++11</span> (always false) 1241 </p> 1242 </td> 1243<td> 1244 <p> 1245 <span class="gold">c++11</span> (always false) 1246 </p> 1247 </td> 1248</tr> 1249<tr> 1250<td> 1251 <p> 1252 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_noexcept" title="is_noexcept"><code class="literal">is_noexcept</code></a> 1253 </p> 1254 </td> 1255<td> 1256 <p> 1257 <span class="green">c++17</span> 1258 </p> 1259 </td> 1260<td> 1261 <p> 1262 <span class="green">c++17</span> 1263 </p> 1264 </td> 1265<td> 1266 <p> 1267 <span class="green">c++17</span> 1268 </p> 1269 </td> 1270<td> 1271 <p> 1272 <span class="gold">c++11</span> (always false) 1273 </p> 1274 </td> 1275<td> 1276 <p> 1277 <span class="gold">c++11</span> (always false) 1278 </p> 1279 </td> 1280<td> 1281 <p> 1282 <span class="gold">c++11</span> (always false) 1283 </p> 1284 </td> 1285<td> 1286 <p> 1287 <span class="gold">c++11</span> (always false) 1288 </p> 1289 </td> 1290</tr> 1291<tr> 1292<td> 1293 <p> 1294 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_reference_member" title="is_reference_member"><code class="literal">is_reference_member</code></a> 1295 </p> 1296 </td> 1297<td> 1298 <p> 1299 <span class="green">c++11</span> 1300 </p> 1301 </td> 1302<td> 1303 <p> 1304 <span class="green">c++11</span> 1305 </p> 1306 </td> 1307<td> 1308 <p> 1309 <span class="green">c++11</span> 1310 </p> 1311 </td> 1312<td> 1313 <p> 1314 <span class="green">c++11</span> 1315 </p> 1316 </td> 1317<td> 1318 <p> 1319 <span class="green">c++11</span> 1320 </p> 1321 </td> 1322<td> 1323 <p> 1324 <span class="gold">c++11</span> (always false) 1325 </p> 1326 </td> 1327<td> 1328 <p> 1329 <span class="gold">c++11</span> (always false) 1330 </p> 1331 </td> 1332</tr> 1333<tr> 1334<td> 1335 <p> 1336 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_rvalue_reference_member" title="is_rvalue_reference_member"><code class="literal">is_rvalue_reference_member</code></a> 1337 </p> 1338 </td> 1339<td> 1340 <p> 1341 <span class="green">c++11</span> 1342 </p> 1343 </td> 1344<td> 1345 <p> 1346 <span class="green">c++11</span> 1347 </p> 1348 </td> 1349<td> 1350 <p> 1351 <span class="green">c++11</span> 1352 </p> 1353 </td> 1354<td> 1355 <p> 1356 <span class="green">c++11</span> 1357 </p> 1358 </td> 1359<td> 1360 <p> 1361 <span class="green">c++11</span> 1362 </p> 1363 </td> 1364<td> 1365 <p> 1366 <span class="gold">c++11</span> (always false) 1367 </p> 1368 </td> 1369<td> 1370 <p> 1371 <span class="gold">c++11</span> (always false) 1372 </p> 1373 </td> 1374</tr> 1375<tr> 1376<td> 1377 <p> 1378 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_transaction_safe" title="is_transaction_safe"><code class="literal">is_transaction_safe</code></a> 1379 </p> 1380 </td> 1381<td> 1382 <p> 1383 <span class="gold">c++17</span> (requires -fgnu-tm) 1384 </p> 1385 </td> 1386<td> 1387 <p> 1388 <span class="gold">c++17</span> (requires -fgnu-tm) 1389 </p> 1390 </td> 1391<td> 1392 <p> 1393 <span class="gold">c++17</span> (requires -fgnu-tm) 1394 </p> 1395 </td> 1396<td> 1397 <p> 1398 <span class="gold">c++11</span> (always false) 1399 </p> 1400 </td> 1401<td> 1402 <p> 1403 <span class="gold">c++11</span> (always false) 1404 </p> 1405 </td> 1406<td> 1407 <p> 1408 <span class="gold">c++11</span> (always false) 1409 </p> 1410 </td> 1411<td> 1412 <p> 1413 <span class="gold">c++11</span> (always false) 1414 </p> 1415 </td> 1416</tr> 1417<tr> 1418<td> 1419 <p> 1420 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_volatile_member" title="is_volatile_member"><code class="literal">is_volatile_member</code></a> 1421 </p> 1422 </td> 1423<td> 1424 <p> 1425 <span class="green">c++11</span> 1426 </p> 1427 </td> 1428<td> 1429 <p> 1430 <span class="green">c++11</span> 1431 </p> 1432 </td> 1433<td> 1434 <p> 1435 <span class="green">c++11</span> 1436 </p> 1437 </td> 1438<td> 1439 <p> 1440 <span class="green">c++11</span> 1441 </p> 1442 </td> 1443<td> 1444 <p> 1445 <span class="green">c++11</span> 1446 </p> 1447 </td> 1448<td> 1449 <p> 1450 <span class="gold">c++11</span> (no abominables) 1451 </p> 1452 </td> 1453<td> 1454 <p> 1455 <span class="gold">c++11</span> (no abominables) 1456 </p> 1457 </td> 1458</tr> 1459<tr> 1460<td> 1461 <p> 1462 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_qualified_class_of" title="qualified_class_of"><code class="literal">qualified_class_of</code></a> 1463 </p> 1464 </td> 1465<td> 1466 <p> 1467 <span class="green">c++11</span> 1468 </p> 1469 </td> 1470<td> 1471 <p> 1472 <span class="green">c++11</span> 1473 </p> 1474 </td> 1475<td> 1476 <p> 1477 <span class="green">c++11</span> 1478 </p> 1479 </td> 1480<td> 1481 <p> 1482 <span class="green">c++11</span> 1483 </p> 1484 </td> 1485<td> 1486 <p> 1487 <span class="green">c++11</span> 1488 </p> 1489 </td> 1490<td> 1491 <p> 1492 <span class="green">c++11</span> 1493 </p> 1494 </td> 1495<td> 1496 <p> 1497 <span class="green">c++11</span> 1498 </p> 1499 </td> 1500</tr> 1501<tr> 1502<td> 1503 <p> 1504 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_const" title="remove_member_const"><code class="literal">remove_member_const</code></a> 1505 </p> 1506 </td> 1507<td> 1508 <p> 1509 <span class="green">c++11</span> 1510 </p> 1511 </td> 1512<td> 1513 <p> 1514 <span class="green">c++11</span> 1515 </p> 1516 </td> 1517<td> 1518 <p> 1519 <span class="green">c++11</span> 1520 </p> 1521 </td> 1522<td> 1523 <p> 1524 <span class="green">c++11</span> 1525 </p> 1526 </td> 1527<td> 1528 <p> 1529 <span class="green">c++11</span> 1530 </p> 1531 </td> 1532<td> 1533 <p> 1534 <span class="gold">c++11</span> (no abominables) 1535 </p> 1536 </td> 1537<td> 1538 <p> 1539 <span class="gold">c++11</span> (no abominables) 1540 </p> 1541 </td> 1542</tr> 1543<tr> 1544<td> 1545 <p> 1546 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_cv" title="remove_member_cv"><code class="literal">remove_member_cv</code></a> 1547 </p> 1548 </td> 1549<td> 1550 <p> 1551 <span class="green">c++11</span> 1552 </p> 1553 </td> 1554<td> 1555 <p> 1556 <span class="green">c++11</span> 1557 </p> 1558 </td> 1559<td> 1560 <p> 1561 <span class="green">c++11</span> 1562 </p> 1563 </td> 1564<td> 1565 <p> 1566 <span class="green">c++11</span> 1567 </p> 1568 </td> 1569<td> 1570 <p> 1571 <span class="green">c++11</span> 1572 </p> 1573 </td> 1574<td> 1575 <p> 1576 <span class="gold">c++11</span> (no abominables) 1577 </p> 1578 </td> 1579<td> 1580 <p> 1581 <span class="gold">c++11</span> (no abominables) 1582 </p> 1583 </td> 1584</tr> 1585<tr> 1586<td> 1587 <p> 1588 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_reference" title="remove_member_reference"><code class="literal">remove_member_reference</code></a> 1589 </p> 1590 </td> 1591<td> 1592 <p> 1593 <span class="green">c++11</span> 1594 </p> 1595 </td> 1596<td> 1597 <p> 1598 <span class="green">c++11</span> 1599 </p> 1600 </td> 1601<td> 1602 <p> 1603 <span class="green">c++11</span> 1604 </p> 1605 </td> 1606<td> 1607 <p> 1608 <span class="green">c++11</span> 1609 </p> 1610 </td> 1611<td> 1612 <p> 1613 <span class="green">c++11</span> 1614 </p> 1615 </td> 1616<td> 1617 <p> 1618 <span class="gold">c++11</span> (no effect) 1619 </p> 1620 </td> 1621<td> 1622 <p> 1623 <span class="gold">c++11</span> (no effect) 1624 </p> 1625 </td> 1626</tr> 1627<tr> 1628<td> 1629 <p> 1630 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_volatile" title="remove_member_volatile"><code class="literal">remove_member_volatile</code></a> 1631 </p> 1632 </td> 1633<td> 1634 <p> 1635 <span class="green">c++11</span> 1636 </p> 1637 </td> 1638<td> 1639 <p> 1640 <span class="green">c++11</span> 1641 </p> 1642 </td> 1643<td> 1644 <p> 1645 <span class="green">c++11</span> 1646 </p> 1647 </td> 1648<td> 1649 <p> 1650 <span class="green">c++11</span> 1651 </p> 1652 </td> 1653<td> 1654 <p> 1655 <span class="green">c++11</span> 1656 </p> 1657 </td> 1658<td> 1659 <p> 1660 <span class="gold">c++11</span> (no abominables) 1661 </p> 1662 </td> 1663<td> 1664 <p> 1665 <span class="gold">c++11</span> (no abominables) 1666 </p> 1667 </td> 1668</tr> 1669<tr> 1670<td> 1671 <p> 1672 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_noexcept" title="remove_noexcept"><code class="literal">remove_noexcept</code></a> 1673 </p> 1674 </td> 1675<td> 1676 <p> 1677 <span class="green">c++17</span> 1678 </p> 1679 </td> 1680<td> 1681 <p> 1682 <span class="green">c++17</span> 1683 </p> 1684 </td> 1685<td> 1686 <p> 1687 <span class="green">c++17</span> 1688 </p> 1689 </td> 1690<td> 1691 <p> 1692 <span class="gold">c++11</span> (no effect) 1693 </p> 1694 </td> 1695<td> 1696 <p> 1697 <span class="gold">c++11</span> (no effect) 1698 </p> 1699 </td> 1700<td> 1701 <p> 1702 <span class="gold">c++11</span> (no effect) 1703 </p> 1704 </td> 1705<td> 1706 <p> 1707 <span class="gold">c++11</span> (no effect) 1708 </p> 1709 </td> 1710</tr> 1711<tr> 1712<td> 1713 <p> 1714 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_transaction_safe" title="remove_transaction_safe"><code class="literal">remove_transaction_safe</code></a> 1715 </p> 1716 </td> 1717<td> 1718 <p> 1719 <span class="gold">c++17</span> (requires -fgnu-tm) 1720 </p> 1721 </td> 1722<td> 1723 <p> 1724 <span class="gold">c++17</span> (requires -fgnu-tm) 1725 </p> 1726 </td> 1727<td> 1728 <p> 1729 <span class="gold">c++17</span> (requires -fgnu-tm) 1730 </p> 1731 </td> 1732<td> 1733 <p> 1734 <span class="gold">c++11</span> (no effect) 1735 </p> 1736 </td> 1737<td> 1738 <p> 1739 <span class="gold">c++11</span> (no effect) 1740 </p> 1741 </td> 1742<td> 1743 <p> 1744 <span class="gold">c++11</span> (no effect) 1745 </p> 1746 </td> 1747<td> 1748 <p> 1749 <span class="gold">c++11</span> (no effect) 1750 </p> 1751 </td> 1752</tr> 1753<tr> 1754<td> 1755 <p> 1756 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_varargs" title="remove_varargs"><code class="literal">remove_varargs</code></a> 1757 </p> 1758 </td> 1759<td> 1760 <p> 1761 <span class="green">c++11</span> 1762 </p> 1763 </td> 1764<td> 1765 <p> 1766 <span class="green">c++11</span> 1767 </p> 1768 </td> 1769<td> 1770 <p> 1771 <span class="green">c++11</span> 1772 </p> 1773 </td> 1774<td> 1775 <p> 1776 <span class="green">c++11</span> 1777 </p> 1778 </td> 1779<td> 1780 <p> 1781 <span class="green">c++11</span> 1782 </p> 1783 </td> 1784<td> 1785 <p> 1786 <span class="green">c++11</span> 1787 </p> 1788 </td> 1789<td> 1790 <p> 1791 <span class="green">c++11</span> 1792 </p> 1793 </td> 1794</tr> 1795<tr> 1796<td> 1797 <p> 1798 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_return_type" title="return_type"><code class="literal">return_type</code></a> 1799 </p> 1800 </td> 1801<td> 1802 <p> 1803 <span class="green">c++11</span> 1804 </p> 1805 </td> 1806<td> 1807 <p> 1808 <span class="green">c++11</span> 1809 </p> 1810 </td> 1811<td> 1812 <p> 1813 <span class="green">c++11</span> 1814 </p> 1815 </td> 1816<td> 1817 <p> 1818 <span class="green">c++11</span> 1819 </p> 1820 </td> 1821<td> 1822 <p> 1823 <span class="green">c++11</span> 1824 </p> 1825 </td> 1826<td> 1827 <p> 1828 <span class="green">c++11</span> 1829 </p> 1830 </td> 1831<td> 1832 <p> 1833 <span class="green">c++11</span> 1834 </p> 1835 </td> 1836</tr> 1837</tbody> 1838</table></div> 1839</div> 1840<br class="table-break"><div class="table"> 1841<a name="callable_traits.introduction.compatibility.llvm_clang_support"></a><p class="title"><b>Table 2. LLVM/Clang Support</b></p> 1842<div class="table-contents"><table class="table" summary="LLVM/Clang Support"> 1843<colgroup> 1844<col> 1845<col> 1846<col> 1847<col> 1848<col> 1849<col> 1850<col> 1851<col> 1852<col> 1853</colgroup> 1854<thead><tr> 1855<th> 1856 <p> 1857 feature 1858 </p> 1859 </th> 1860<th> 1861 <p> 1862 Clang 7.0.1 1863 </p> 1864 </th> 1865<th> 1866 <p> 1867 Clang 6.0.0 1868 </p> 1869 </th> 1870<th> 1871 <p> 1872 Clang 5.0.1 1873 </p> 1874 </th> 1875<th> 1876 <p> 1877 Clang 4.0.0 1878 </p> 1879 </th> 1880<th> 1881 <p> 1882 Clang 3.8.0 1883 </p> 1884 </th> 1885<th> 1886 <p> 1887 Clang 3.7.1 1888 </p> 1889 </th> 1890<th> 1891 <p> 1892 Clang 3.6.2 1893 </p> 1894 </th> 1895<th> 1896 <p> 1897 Clang 3.5.2 1898 </p> 1899 </th> 1900</tr></thead> 1901<tbody> 1902<tr> 1903<td> 1904 <p> 1905 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_const" title="add_member_const"><code class="literal">add_member_const</code></a> 1906 </p> 1907 </td> 1908<td> 1909 <p> 1910 <span class="green">c++11</span> 1911 </p> 1912 </td> 1913<td> 1914 <p> 1915 <span class="green">c++11</span> 1916 </p> 1917 </td> 1918<td> 1919 <p> 1920 <span class="green">c++11</span> 1921 </p> 1922 </td> 1923<td> 1924 <p> 1925 <span class="green">c++11</span> 1926 </p> 1927 </td> 1928<td> 1929 <p> 1930 <span class="green">c++11</span> 1931 </p> 1932 </td> 1933<td> 1934 <p> 1935 <span class="green">c++11</span> 1936 </p> 1937 </td> 1938<td> 1939 <p> 1940 <span class="green">c++11</span> 1941 </p> 1942 </td> 1943<td> 1944 <p> 1945 <span class="green">c++11</span> 1946 </p> 1947 </td> 1948</tr> 1949<tr> 1950<td> 1951 <p> 1952 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_cv" title="add_member_cv"><code class="literal">add_member_cv</code></a> 1953 </p> 1954 </td> 1955<td> 1956 <p> 1957 <span class="green">c++11</span> 1958 </p> 1959 </td> 1960<td> 1961 <p> 1962 <span class="green">c++11</span> 1963 </p> 1964 </td> 1965<td> 1966 <p> 1967 <span class="green">c++11</span> 1968 </p> 1969 </td> 1970<td> 1971 <p> 1972 <span class="green">c++11</span> 1973 </p> 1974 </td> 1975<td> 1976 <p> 1977 <span class="green">c++11</span> 1978 </p> 1979 </td> 1980<td> 1981 <p> 1982 <span class="green">c++11</span> 1983 </p> 1984 </td> 1985<td> 1986 <p> 1987 <span class="green">c++11</span> 1988 </p> 1989 </td> 1990<td> 1991 <p> 1992 <span class="green">c++11</span> 1993 </p> 1994 </td> 1995</tr> 1996<tr> 1997<td> 1998 <p> 1999 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_lvalue_reference" title="add_member_lvalue_reference"><code class="literal">add_member_lvalue_reference</code></a> 2000 </p> 2001 </td> 2002<td> 2003 <p> 2004 <span class="green">c++11</span> 2005 </p> 2006 </td> 2007<td> 2008 <p> 2009 <span class="green">c++11</span> 2010 </p> 2011 </td> 2012<td> 2013 <p> 2014 <span class="green">c++11</span> 2015 </p> 2016 </td> 2017<td> 2018 <p> 2019 <span class="green">c++11</span> 2020 </p> 2021 </td> 2022<td> 2023 <p> 2024 <span class="green">c++11</span> 2025 </p> 2026 </td> 2027<td> 2028 <p> 2029 <span class="green">c++11</span> 2030 </p> 2031 </td> 2032<td> 2033 <p> 2034 <span class="green">c++11</span> 2035 </p> 2036 </td> 2037<td> 2038 <p> 2039 <span class="green">c++11</span> 2040 </p> 2041 </td> 2042</tr> 2043<tr> 2044<td> 2045 <p> 2046 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_rvalue_reference" title="add_member_rvalue_reference"><code class="literal">add_member_rvalue_reference</code></a> 2047 </p> 2048 </td> 2049<td> 2050 <p> 2051 <span class="green">c++11</span> 2052 </p> 2053 </td> 2054<td> 2055 <p> 2056 <span class="green">c++11</span> 2057 </p> 2058 </td> 2059<td> 2060 <p> 2061 <span class="green">c++11</span> 2062 </p> 2063 </td> 2064<td> 2065 <p> 2066 <span class="green">c++11</span> 2067 </p> 2068 </td> 2069<td> 2070 <p> 2071 <span class="green">c++11</span> 2072 </p> 2073 </td> 2074<td> 2075 <p> 2076 <span class="green">c++11</span> 2077 </p> 2078 </td> 2079<td> 2080 <p> 2081 <span class="green">c++11</span> 2082 </p> 2083 </td> 2084<td> 2085 <p> 2086 <span class="green">c++11</span> 2087 </p> 2088 </td> 2089</tr> 2090<tr> 2091<td> 2092 <p> 2093 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_volatile" title="add_member_volatile"><code class="literal">add_member_volatile</code></a> 2094 </p> 2095 </td> 2096<td> 2097 <p> 2098 <span class="green">c++11</span> 2099 </p> 2100 </td> 2101<td> 2102 <p> 2103 <span class="green">c++11</span> 2104 </p> 2105 </td> 2106<td> 2107 <p> 2108 <span class="green">c++11</span> 2109 </p> 2110 </td> 2111<td> 2112 <p> 2113 <span class="green">c++11</span> 2114 </p> 2115 </td> 2116<td> 2117 <p> 2118 <span class="green">c++11</span> 2119 </p> 2120 </td> 2121<td> 2122 <p> 2123 <span class="green">c++11</span> 2124 </p> 2125 </td> 2126<td> 2127 <p> 2128 <span class="green">c++11</span> 2129 </p> 2130 </td> 2131<td> 2132 <p> 2133 <span class="green">c++11</span> 2134 </p> 2135 </td> 2136</tr> 2137<tr> 2138<td> 2139 <p> 2140 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_noexcept" title="add_noexcept"><code class="literal">add_noexcept</code></a> 2141 </p> 2142 </td> 2143<td> 2144 <p> 2145 <span class="green">c++11</span> 2146 </p> 2147 </td> 2148<td> 2149 <p> 2150 <span class="green">c++17</span> 2151 </p> 2152 </td> 2153<td> 2154 <p> 2155 <span class="green">c++17</span> 2156 </p> 2157 </td> 2158<td> 2159 <p> 2160 <span class="green">c++17</span> 2161 </p> 2162 </td> 2163<td> 2164 <p> 2165 <span class="red">static_assert fails on instantiation</span> 2166 </p> 2167 </td> 2168<td> 2169 <p> 2170 <span class="red">static_assert fails on instantiation</span> 2171 </p> 2172 </td> 2173<td> 2174 <p> 2175 <span class="red">static_assert fails on instantiation</span> 2176 </p> 2177 </td> 2178<td> 2179 <p> 2180 <span class="red">static_assert fails on instantiation</span> 2181 </p> 2182 </td> 2183</tr> 2184<tr> 2185<td> 2186 <p> 2187 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_transaction_safe" title="add_transaction_safe"><code class="literal">add_transaction_safe</code></a> 2188 </p> 2189 </td> 2190<td> 2191 <p> 2192 unknown 2193 </p> 2194 </td> 2195<td> 2196 <p> 2197 unknown 2198 </p> 2199 </td> 2200<td> 2201 <p> 2202 unknown 2203 </p> 2204 </td> 2205<td> 2206 <p> 2207 unknown 2208 </p> 2209 </td> 2210<td> 2211 <p> 2212 <span class="red">static_assert fails on instantiation</span> 2213 </p> 2214 </td> 2215<td> 2216 <p> 2217 <span class="red">static_assert fails on instantiation</span> 2218 </p> 2219 </td> 2220<td> 2221 <p> 2222 <span class="red">static_assert fails on instantiation</span> 2223 </p> 2224 </td> 2225<td> 2226 <p> 2227 <span class="red">static_assert fails on instantiation</span> 2228 </p> 2229 </td> 2230</tr> 2231<tr> 2232<td> 2233 <p> 2234 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_varargs" title="add_varargs"><code class="literal">add_varargs</code></a> 2235 </p> 2236 </td> 2237<td> 2238 <p> 2239 <span class="green">c++11</span> 2240 </p> 2241 </td> 2242<td> 2243 <p> 2244 <span class="green">c++11</span> 2245 </p> 2246 </td> 2247<td> 2248 <p> 2249 <span class="green">c++11</span> 2250 </p> 2251 </td> 2252<td> 2253 <p> 2254 <span class="green">c++11</span> 2255 </p> 2256 </td> 2257<td> 2258 <p> 2259 <span class="green">c++11</span> 2260 </p> 2261 </td> 2262<td> 2263 <p> 2264 <span class="green">c++11</span> 2265 </p> 2266 </td> 2267<td> 2268 <p> 2269 <span class="green">c++11</span> 2270 </p> 2271 </td> 2272<td> 2273 <p> 2274 <span class="green">c++11</span> 2275 </p> 2276 </td> 2277</tr> 2278<tr> 2279<td> 2280 <p> 2281 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_apply_member_pointer" title="apply_member_pointer"><code class="literal">apply_member_pointer</code></a> 2282 </p> 2283 </td> 2284<td> 2285 <p> 2286 <span class="green">c++11</span> 2287 </p> 2288 </td> 2289<td> 2290 <p> 2291 <span class="green">c++11</span> 2292 </p> 2293 </td> 2294<td> 2295 <p> 2296 <span class="green">c++11</span> 2297 </p> 2298 </td> 2299<td> 2300 <p> 2301 <span class="green">c++11</span> 2302 </p> 2303 </td> 2304<td> 2305 <p> 2306 <span class="green">c++11</span> 2307 </p> 2308 </td> 2309<td> 2310 <p> 2311 <span class="green">c++11</span> 2312 </p> 2313 </td> 2314<td> 2315 <p> 2316 <span class="green">c++11</span> 2317 </p> 2318 </td> 2319<td> 2320 <p> 2321 <span class="green">c++11</span> 2322 </p> 2323 </td> 2324</tr> 2325<tr> 2326<td> 2327 <p> 2328 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_apply_return" title="apply_return"><code class="literal">apply_return</code></a> 2329 </p> 2330 </td> 2331<td> 2332 <p> 2333 <span class="green">c++11</span> 2334 </p> 2335 </td> 2336<td> 2337 <p> 2338 <span class="green">c++11</span> 2339 </p> 2340 </td> 2341<td> 2342 <p> 2343 <span class="green">c++11</span> 2344 </p> 2345 </td> 2346<td> 2347 <p> 2348 <span class="green">c++11</span> 2349 </p> 2350 </td> 2351<td> 2352 <p> 2353 <span class="green">c++11</span> 2354 </p> 2355 </td> 2356<td> 2357 <p> 2358 <span class="green">c++11</span> 2359 </p> 2360 </td> 2361<td> 2362 <p> 2363 <span class="green">c++11</span> 2364 </p> 2365 </td> 2366<td> 2367 <p> 2368 <span class="green">c++11</span> 2369 </p> 2370 </td> 2371</tr> 2372<tr> 2373<td> 2374 <p> 2375 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_args" title="args"><code class="literal">args</code></a> 2376 </p> 2377 </td> 2378<td> 2379 <p> 2380 <span class="green">c++11</span> 2381 </p> 2382 </td> 2383<td> 2384 <p> 2385 <span class="green">c++11</span> 2386 </p> 2387 </td> 2388<td> 2389 <p> 2390 <span class="green">c++11</span> 2391 </p> 2392 </td> 2393<td> 2394 <p> 2395 <span class="green">c++11</span> 2396 </p> 2397 </td> 2398<td> 2399 <p> 2400 <span class="green">c++11</span> 2401 </p> 2402 </td> 2403<td> 2404 <p> 2405 <span class="green">c++11</span> 2406 </p> 2407 </td> 2408<td> 2409 <p> 2410 <span class="green">c++11</span> 2411 </p> 2412 </td> 2413<td> 2414 <p> 2415 <span class="green">c++11</span> 2416 </p> 2417 </td> 2418</tr> 2419<tr> 2420<td> 2421 <p> 2422 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_class_of" title="class_of"><code class="literal">class_of</code></a> 2423 </p> 2424 </td> 2425<td> 2426 <p> 2427 <span class="green">c++11</span> 2428 </p> 2429 </td> 2430<td> 2431 <p> 2432 <span class="green">c++11</span> 2433 </p> 2434 </td> 2435<td> 2436 <p> 2437 <span class="green">c++11</span> 2438 </p> 2439 </td> 2440<td> 2441 <p> 2442 <span class="green">c++11</span> 2443 </p> 2444 </td> 2445<td> 2446 <p> 2447 <span class="green">c++11</span> 2448 </p> 2449 </td> 2450<td> 2451 <p> 2452 <span class="green">c++11</span> 2453 </p> 2454 </td> 2455<td> 2456 <p> 2457 <span class="green">c++11</span> 2458 </p> 2459 </td> 2460<td> 2461 <p> 2462 <span class="green">c++11</span> 2463 </p> 2464 </td> 2465</tr> 2466<tr> 2467<td> 2468 <p> 2469 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_function_type" title="function_type"><code class="literal">function_type</code></a> 2470 </p> 2471 </td> 2472<td> 2473 <p> 2474 <span class="green">c++11</span> 2475 </p> 2476 </td> 2477<td> 2478 <p> 2479 <span class="green">c++11</span> 2480 </p> 2481 </td> 2482<td> 2483 <p> 2484 <span class="green">c++11</span> 2485 </p> 2486 </td> 2487<td> 2488 <p> 2489 <span class="green">c++11</span> 2490 </p> 2491 </td> 2492<td> 2493 <p> 2494 <span class="green">c++11</span> 2495 </p> 2496 </td> 2497<td> 2498 <p> 2499 <span class="green">c++11</span> 2500 </p> 2501 </td> 2502<td> 2503 <p> 2504 <span class="green">c++11</span> 2505 </p> 2506 </td> 2507<td> 2508 <p> 2509 <span class="green">c++11</span> 2510 </p> 2511 </td> 2512</tr> 2513<tr> 2514<td> 2515 <p> 2516 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_has_member_qualifiers" title="has_member_qualifiers"><code class="literal">has_member_qualifiers</code></a> 2517 </p> 2518 </td> 2519<td> 2520 <p> 2521 <span class="green">c++11</span> 2522 </p> 2523 </td> 2524<td> 2525 <p> 2526 <span class="green">c++11</span> 2527 </p> 2528 </td> 2529<td> 2530 <p> 2531 <span class="green">c++11</span> 2532 </p> 2533 </td> 2534<td> 2535 <p> 2536 <span class="green">c++11</span> 2537 </p> 2538 </td> 2539<td> 2540 <p> 2541 <span class="green">c++11</span> 2542 </p> 2543 </td> 2544<td> 2545 <p> 2546 <span class="green">c++11</span> 2547 </p> 2548 </td> 2549<td> 2550 <p> 2551 <span class="green">c++11</span> 2552 </p> 2553 </td> 2554<td> 2555 <p> 2556 <span class="green">c++11</span> 2557 </p> 2558 </td> 2559</tr> 2560<tr> 2561<td> 2562 <p> 2563 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_has_varargs" title="has_varargs"><code class="literal">has_varargs</code></a> 2564 </p> 2565 </td> 2566<td> 2567 <p> 2568 <span class="green">c++11</span> 2569 </p> 2570 </td> 2571<td> 2572 <p> 2573 <span class="green">c++11</span> 2574 </p> 2575 </td> 2576<td> 2577 <p> 2578 <span class="green">c++11</span> 2579 </p> 2580 </td> 2581<td> 2582 <p> 2583 <span class="green">c++11</span> 2584 </p> 2585 </td> 2586<td> 2587 <p> 2588 <span class="green">c++11</span> 2589 </p> 2590 </td> 2591<td> 2592 <p> 2593 <span class="green">c++11</span> 2594 </p> 2595 </td> 2596<td> 2597 <p> 2598 <span class="green">c++11</span> 2599 </p> 2600 </td> 2601<td> 2602 <p> 2603 <span class="green">c++11</span> 2604 </p> 2605 </td> 2606</tr> 2607<tr> 2608<td> 2609 <p> 2610 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_has_void_return" title="has_void_return"><code class="literal">has_void_return</code></a> 2611 </p> 2612 </td> 2613<td> 2614 <p> 2615 <span class="green">c++11</span> 2616 </p> 2617 </td> 2618<td> 2619 <p> 2620 <span class="green">c++11</span> 2621 </p> 2622 </td> 2623<td> 2624 <p> 2625 <span class="green">c++11</span> 2626 </p> 2627 </td> 2628<td> 2629 <p> 2630 <span class="green">c++11</span> 2631 </p> 2632 </td> 2633<td> 2634 <p> 2635 <span class="green">c++11</span> 2636 </p> 2637 </td> 2638<td> 2639 <p> 2640 <span class="green">c++11</span> 2641 </p> 2642 </td> 2643<td> 2644 <p> 2645 <span class="green">c++11</span> 2646 </p> 2647 </td> 2648<td> 2649 <p> 2650 <span class="green">c++11</span> 2651 </p> 2652 </td> 2653</tr> 2654<tr> 2655<td> 2656 <p> 2657 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_const_member" title="is_const_member"><code class="literal">is_const_member</code></a> 2658 </p> 2659 </td> 2660<td> 2661 <p> 2662 <span class="green">c++11</span> 2663 </p> 2664 </td> 2665<td> 2666 <p> 2667 <span class="green">c++11</span> 2668 </p> 2669 </td> 2670<td> 2671 <p> 2672 <span class="green">c++11</span> 2673 </p> 2674 </td> 2675<td> 2676 <p> 2677 <span class="green">c++11</span> 2678 </p> 2679 </td> 2680<td> 2681 <p> 2682 <span class="green">c++11</span> 2683 </p> 2684 </td> 2685<td> 2686 <p> 2687 <span class="green">c++11</span> 2688 </p> 2689 </td> 2690<td> 2691 <p> 2692 <span class="green">c++11</span> 2693 </p> 2694 </td> 2695<td> 2696 <p> 2697 <span class="green">c++11</span> 2698 </p> 2699 </td> 2700</tr> 2701<tr> 2702<td> 2703 <p> 2704 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_cv_member" title="is_cv_member"><code class="literal">is_cv_member</code></a> 2705 </p> 2706 </td> 2707<td> 2708 <p> 2709 <span class="green">c++11</span> 2710 </p> 2711 </td> 2712<td> 2713 <p> 2714 <span class="green">c++11</span> 2715 </p> 2716 </td> 2717<td> 2718 <p> 2719 <span class="green">c++11</span> 2720 </p> 2721 </td> 2722<td> 2723 <p> 2724 <span class="green">c++11</span> 2725 </p> 2726 </td> 2727<td> 2728 <p> 2729 <span class="green">c++11</span> 2730 </p> 2731 </td> 2732<td> 2733 <p> 2734 <span class="green">c++11</span> 2735 </p> 2736 </td> 2737<td> 2738 <p> 2739 <span class="green">c++11</span> 2740 </p> 2741 </td> 2742<td> 2743 <p> 2744 <span class="green">c++11</span> 2745 </p> 2746 </td> 2747</tr> 2748<tr> 2749<td> 2750 <p> 2751 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_invocable" title="is_invocable"><code class="literal">is_invocable</code></a> 2752 </p> 2753 </td> 2754<td> 2755 <p> 2756 <span class="green">c++11</span> 2757 </p> 2758 </td> 2759<td> 2760 <p> 2761 <span class="green">c++11</span> 2762 </p> 2763 </td> 2764<td> 2765 <p> 2766 <span class="green">c++11</span> 2767 </p> 2768 </td> 2769<td> 2770 <p> 2771 <span class="green">c++11</span> 2772 </p> 2773 </td> 2774<td> 2775 <p> 2776 <span class="green">c++11</span> 2777 </p> 2778 </td> 2779<td> 2780 <p> 2781 <span class="green">c++11</span> 2782 </p> 2783 </td> 2784<td> 2785 <p> 2786 <span class="green">c++11</span> 2787 </p> 2788 </td> 2789<td> 2790 <p> 2791 <span class="green">c++11</span> 2792 </p> 2793 </td> 2794</tr> 2795<tr> 2796<td> 2797 <p> 2798 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_lvalue_reference_member" title="is_lvalue_reference_member"><code class="literal">is_lvalue_reference_member</code></a> 2799 </p> 2800 </td> 2801<td> 2802 <p> 2803 <span class="green">c++11</span> 2804 </p> 2805 </td> 2806<td> 2807 <p> 2808 <span class="green">c++11</span> 2809 </p> 2810 </td> 2811<td> 2812 <p> 2813 <span class="green">c++11</span> 2814 </p> 2815 </td> 2816<td> 2817 <p> 2818 <span class="green">c++11</span> 2819 </p> 2820 </td> 2821<td> 2822 <p> 2823 <span class="green">c++11</span> 2824 </p> 2825 </td> 2826<td> 2827 <p> 2828 <span class="green">c++11</span> 2829 </p> 2830 </td> 2831<td> 2832 <p> 2833 <span class="green">c++11</span> 2834 </p> 2835 </td> 2836<td> 2837 <p> 2838 <span class="green">c++11</span> 2839 </p> 2840 </td> 2841</tr> 2842<tr> 2843<td> 2844 <p> 2845 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_noexcept" title="is_noexcept"><code class="literal">is_noexcept</code></a> 2846 </p> 2847 </td> 2848<td> 2849 <p> 2850 <span class="green">c++17</span> 2851 </p> 2852 </td> 2853<td> 2854 <p> 2855 <span class="green">c++17</span> 2856 </p> 2857 </td> 2858<td> 2859 <p> 2860 <span class="green">c++17</span> 2861 </p> 2862 </td> 2863<td> 2864 <p> 2865 <span class="green">c++17</span> 2866 </p> 2867 </td> 2868<td> 2869 <p> 2870 <span class="gold">c++11</span> (always false) 2871 </p> 2872 </td> 2873<td> 2874 <p> 2875 <span class="gold">c++11</span> (always false) 2876 </p> 2877 </td> 2878<td> 2879 <p> 2880 <span class="gold">c++11</span> (always false) 2881 </p> 2882 </td> 2883<td> 2884 <p> 2885 <span class="gold">c++11</span> (always false) 2886 </p> 2887 </td> 2888</tr> 2889<tr> 2890<td> 2891 <p> 2892 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_reference_member" title="is_reference_member"><code class="literal">is_reference_member</code></a> 2893 </p> 2894 </td> 2895<td> 2896 <p> 2897 <span class="green">c++11</span> 2898 </p> 2899 </td> 2900<td> 2901 <p> 2902 <span class="green">c++11</span> 2903 </p> 2904 </td> 2905<td> 2906 <p> 2907 <span class="green">c++11</span> 2908 </p> 2909 </td> 2910<td> 2911 <p> 2912 <span class="green">c++11</span> 2913 </p> 2914 </td> 2915<td> 2916 <p> 2917 <span class="green">c++11</span> 2918 </p> 2919 </td> 2920<td> 2921 <p> 2922 <span class="green">c++11</span> 2923 </p> 2924 </td> 2925<td> 2926 <p> 2927 <span class="green">c++11</span> 2928 </p> 2929 </td> 2930<td> 2931 <p> 2932 <span class="green">c++11</span> 2933 </p> 2934 </td> 2935</tr> 2936<tr> 2937<td> 2938 <p> 2939 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_rvalue_reference_member" title="is_rvalue_reference_member"><code class="literal">is_rvalue_reference_member</code></a> 2940 </p> 2941 </td> 2942<td> 2943 <p> 2944 <span class="green">c++11</span> 2945 </p> 2946 </td> 2947<td> 2948 <p> 2949 <span class="green">c++11</span> 2950 </p> 2951 </td> 2952<td> 2953 <p> 2954 <span class="green">c++11</span> 2955 </p> 2956 </td> 2957<td> 2958 <p> 2959 <span class="green">c++11</span> 2960 </p> 2961 </td> 2962<td> 2963 <p> 2964 <span class="green">c++11</span> 2965 </p> 2966 </td> 2967<td> 2968 <p> 2969 <span class="green">c++11</span> 2970 </p> 2971 </td> 2972<td> 2973 <p> 2974 <span class="green">c++11</span> 2975 </p> 2976 </td> 2977<td> 2978 <p> 2979 <span class="green">c++11</span> 2980 </p> 2981 </td> 2982</tr> 2983<tr> 2984<td> 2985 <p> 2986 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_transaction_safe" title="is_transaction_safe"><code class="literal">is_transaction_safe</code></a> 2987 </p> 2988 </td> 2989<td> 2990 <p> 2991 unknown 2992 </p> 2993 </td> 2994<td> 2995 <p> 2996 unknown 2997 </p> 2998 </td> 2999<td> 3000 <p> 3001 unknown 3002 </p> 3003 </td> 3004<td> 3005 <p> 3006 unknown 3007 </p> 3008 </td> 3009<td> 3010 <p> 3011 <span class="gold">c++11</span> (always false) 3012 </p> 3013 </td> 3014<td> 3015 <p> 3016 <span class="gold">c++11</span> (always false) 3017 </p> 3018 </td> 3019<td> 3020 <p> 3021 <span class="gold">c++11</span> (always false) 3022 </p> 3023 </td> 3024<td> 3025 <p> 3026 <span class="gold">c++11</span> (always false) 3027 </p> 3028 </td> 3029</tr> 3030<tr> 3031<td> 3032 <p> 3033 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_volatile_member" title="is_volatile_member"><code class="literal">is_volatile_member</code></a> 3034 </p> 3035 </td> 3036<td> 3037 <p> 3038 <span class="green">c++11</span> 3039 </p> 3040 </td> 3041<td> 3042 <p> 3043 <span class="green">c++11</span> 3044 </p> 3045 </td> 3046<td> 3047 <p> 3048 <span class="green">c++11</span> 3049 </p> 3050 </td> 3051<td> 3052 <p> 3053 <span class="green">c++11</span> 3054 </p> 3055 </td> 3056<td> 3057 <p> 3058 <span class="green">c++11</span> 3059 </p> 3060 </td> 3061<td> 3062 <p> 3063 <span class="green">c++11</span> 3064 </p> 3065 </td> 3066<td> 3067 <p> 3068 <span class="green">c++11</span> 3069 </p> 3070 </td> 3071<td> 3072 <p> 3073 <span class="green">c++11</span> 3074 </p> 3075 </td> 3076</tr> 3077<tr> 3078<td> 3079 <p> 3080 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_qualified_class_of" title="qualified_class_of"><code class="literal">qualified_class_of</code></a> 3081 </p> 3082 </td> 3083<td> 3084 <p> 3085 <span class="green">c++11</span> 3086 </p> 3087 </td> 3088<td> 3089 <p> 3090 <span class="green">c++11</span> 3091 </p> 3092 </td> 3093<td> 3094 <p> 3095 <span class="green">c++11</span> 3096 </p> 3097 </td> 3098<td> 3099 <p> 3100 <span class="green">c++11</span> 3101 </p> 3102 </td> 3103<td> 3104 <p> 3105 <span class="green">c++11</span> 3106 </p> 3107 </td> 3108<td> 3109 <p> 3110 <span class="green">c++11</span> 3111 </p> 3112 </td> 3113<td> 3114 <p> 3115 <span class="green">c++11</span> 3116 </p> 3117 </td> 3118<td> 3119 <p> 3120 <span class="green">c++11</span> 3121 </p> 3122 </td> 3123</tr> 3124<tr> 3125<td> 3126 <p> 3127 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_const" title="remove_member_const"><code class="literal">remove_member_const</code></a> 3128 </p> 3129 </td> 3130<td> 3131 <p> 3132 <span class="green">c++11</span> 3133 </p> 3134 </td> 3135<td> 3136 <p> 3137 <span class="green">c++11</span> 3138 </p> 3139 </td> 3140<td> 3141 <p> 3142 <span class="green">c++11</span> 3143 </p> 3144 </td> 3145<td> 3146 <p> 3147 <span class="green">c++11</span> 3148 </p> 3149 </td> 3150<td> 3151 <p> 3152 <span class="green">c++11</span> 3153 </p> 3154 </td> 3155<td> 3156 <p> 3157 <span class="green">c++11</span> 3158 </p> 3159 </td> 3160<td> 3161 <p> 3162 <span class="green">c++11</span> 3163 </p> 3164 </td> 3165<td> 3166 <p> 3167 <span class="green">c++11</span> 3168 </p> 3169 </td> 3170</tr> 3171<tr> 3172<td> 3173 <p> 3174 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_cv" title="remove_member_cv"><code class="literal">remove_member_cv</code></a> 3175 </p> 3176 </td> 3177<td> 3178 <p> 3179 <span class="green">c++11</span> 3180 </p> 3181 </td> 3182<td> 3183 <p> 3184 <span class="green">c++11</span> 3185 </p> 3186 </td> 3187<td> 3188 <p> 3189 <span class="green">c++11</span> 3190 </p> 3191 </td> 3192<td> 3193 <p> 3194 <span class="green">c++11</span> 3195 </p> 3196 </td> 3197<td> 3198 <p> 3199 <span class="green">c++11</span> 3200 </p> 3201 </td> 3202<td> 3203 <p> 3204 <span class="green">c++11</span> 3205 </p> 3206 </td> 3207<td> 3208 <p> 3209 <span class="green">c++11</span> 3210 </p> 3211 </td> 3212<td> 3213 <p> 3214 <span class="green">c++11</span> 3215 </p> 3216 </td> 3217</tr> 3218<tr> 3219<td> 3220 <p> 3221 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_reference" title="remove_member_reference"><code class="literal">remove_member_reference</code></a> 3222 </p> 3223 </td> 3224<td> 3225 <p> 3226 <span class="green">c++11</span> 3227 </p> 3228 </td> 3229<td> 3230 <p> 3231 <span class="green">c++11</span> 3232 </p> 3233 </td> 3234<td> 3235 <p> 3236 <span class="green">c++11</span> 3237 </p> 3238 </td> 3239<td> 3240 <p> 3241 <span class="green">c++11</span> 3242 </p> 3243 </td> 3244<td> 3245 <p> 3246 <span class="green">c++11</span> 3247 </p> 3248 </td> 3249<td> 3250 <p> 3251 <span class="green">c++11</span> 3252 </p> 3253 </td> 3254<td> 3255 <p> 3256 <span class="green">c++11</span> 3257 </p> 3258 </td> 3259<td> 3260 <p> 3261 <span class="green">c++11</span> 3262 </p> 3263 </td> 3264</tr> 3265<tr> 3266<td> 3267 <p> 3268 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_volatile" title="remove_member_volatile"><code class="literal">remove_member_volatile</code></a> 3269 </p> 3270 </td> 3271<td> 3272 <p> 3273 <span class="green">c++11</span> 3274 </p> 3275 </td> 3276<td> 3277 <p> 3278 <span class="green">c++11</span> 3279 </p> 3280 </td> 3281<td> 3282 <p> 3283 <span class="green">c++11</span> 3284 </p> 3285 </td> 3286<td> 3287 <p> 3288 <span class="green">c++11</span> 3289 </p> 3290 </td> 3291<td> 3292 <p> 3293 <span class="green">c++11</span> 3294 </p> 3295 </td> 3296<td> 3297 <p> 3298 <span class="green">c++11</span> 3299 </p> 3300 </td> 3301<td> 3302 <p> 3303 <span class="green">c++11</span> 3304 </p> 3305 </td> 3306<td> 3307 <p> 3308 <span class="green">c++11</span> 3309 </p> 3310 </td> 3311</tr> 3312<tr> 3313<td> 3314 <p> 3315 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_noexcept" title="remove_noexcept"><code class="literal">remove_noexcept</code></a> 3316 </p> 3317 </td> 3318<td> 3319 <p> 3320 <span class="green">c++17</span> 3321 </p> 3322 </td> 3323<td> 3324 <p> 3325 <span class="green">c++17</span> 3326 </p> 3327 </td> 3328<td> 3329 <p> 3330 <span class="green">c++17</span> 3331 </p> 3332 </td> 3333<td> 3334 <p> 3335 <span class="green">c++17</span> 3336 </p> 3337 </td> 3338<td> 3339 <p> 3340 <span class="gold">c++11</span> (no effect) 3341 </p> 3342 </td> 3343<td> 3344 <p> 3345 <span class="gold">c++11</span> (no effect) 3346 </p> 3347 </td> 3348<td> 3349 <p> 3350 <span class="gold">c++11</span> (no effect) 3351 </p> 3352 </td> 3353<td> 3354 <p> 3355 <span class="gold">c++11</span> (no effect) 3356 </p> 3357 </td> 3358</tr> 3359<tr> 3360<td> 3361 <p> 3362 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_transaction_safe" title="remove_transaction_safe"><code class="literal">remove_transaction_safe</code></a> 3363 </p> 3364 </td> 3365<td> 3366 <p> 3367 unknown 3368 </p> 3369 </td> 3370<td> 3371 <p> 3372 unknown 3373 </p> 3374 </td> 3375<td> 3376 <p> 3377 unknown 3378 </p> 3379 </td> 3380<td> 3381 <p> 3382 unknown 3383 </p> 3384 </td> 3385<td> 3386 <p> 3387 <span class="gold">c++11</span> (no effect) 3388 </p> 3389 </td> 3390<td> 3391 <p> 3392 <span class="gold">c++11</span> (no effect) 3393 </p> 3394 </td> 3395<td> 3396 <p> 3397 <span class="gold">c++11</span> (no effect) 3398 </p> 3399 </td> 3400<td> 3401 <p> 3402 <span class="gold">c++11</span> (no effect) 3403 </p> 3404 </td> 3405</tr> 3406<tr> 3407<td> 3408 <p> 3409 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_varargs" title="remove_varargs"><code class="literal">remove_varargs</code></a> 3410 </p> 3411 </td> 3412<td> 3413 <p> 3414 <span class="green">c++11</span> 3415 </p> 3416 </td> 3417<td> 3418 <p> 3419 <span class="green">c++11</span> 3420 </p> 3421 </td> 3422<td> 3423 <p> 3424 <span class="green">c++11</span> 3425 </p> 3426 </td> 3427<td> 3428 <p> 3429 <span class="green">c++11</span> 3430 </p> 3431 </td> 3432<td> 3433 <p> 3434 <span class="green">c++11</span> 3435 </p> 3436 </td> 3437<td> 3438 <p> 3439 <span class="green">c++11</span> 3440 </p> 3441 </td> 3442<td> 3443 <p> 3444 <span class="green">c++11</span> 3445 </p> 3446 </td> 3447<td> 3448 <p> 3449 <span class="green">c++11</span> 3450 </p> 3451 </td> 3452</tr> 3453<tr> 3454<td> 3455 <p> 3456 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_return_type" title="return_type"><code class="literal">return_type</code></a> 3457 </p> 3458 </td> 3459<td> 3460 <p> 3461 <span class="green">c++11</span> 3462 </p> 3463 </td> 3464<td> 3465 <p> 3466 <span class="green">c++11</span> 3467 </p> 3468 </td> 3469<td> 3470 <p> 3471 <span class="green">c++11</span> 3472 </p> 3473 </td> 3474<td> 3475 <p> 3476 <span class="green">c++11</span> 3477 </p> 3478 </td> 3479<td> 3480 <p> 3481 <span class="green">c++11</span> 3482 </p> 3483 </td> 3484<td> 3485 <p> 3486 <span class="green">c++11</span> 3487 </p> 3488 </td> 3489<td> 3490 <p> 3491 <span class="green">c++11</span> 3492 </p> 3493 </td> 3494<td> 3495 <p> 3496 <span class="green">c++11</span> 3497 </p> 3498 </td> 3499</tr> 3500</tbody> 3501</table></div> 3502</div> 3503<br class="table-break"><div class="table"> 3504<a name="callable_traits.introduction.compatibility.xcode_appleclang_support"></a><p class="title"><b>Table 3. XCode/AppleClang Support</b></p> 3505<div class="table-contents"><table class="table" summary="XCode/AppleClang Support"> 3506<colgroup> 3507<col> 3508<col> 3509<col> 3510<col> 3511<col> 3512<col> 3513</colgroup> 3514<thead><tr> 3515<th> 3516 <p> 3517 feature 3518 </p> 3519 </th> 3520<th> 3521 <p> 3522 XCode 8 3523 </p> 3524 </th> 3525<th> 3526 <p> 3527 XCode 7.3 3528 </p> 3529 </th> 3530<th> 3531 <p> 3532 XCode 7.2 3533 </p> 3534 </th> 3535<th> 3536 <p> 3537 XCode 7.1 3538 </p> 3539 </th> 3540<th> 3541 <p> 3542 XCode 6.4 3543 </p> 3544 </th> 3545</tr></thead> 3546<tbody> 3547<tr> 3548<td> 3549 <p> 3550 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_const" title="add_member_const"><code class="literal">add_member_const</code></a> 3551 </p> 3552 </td> 3553<td> 3554 <p> 3555 <span class="green">c++11</span> 3556 </p> 3557 </td> 3558<td> 3559 <p> 3560 <span class="green">c++11</span> 3561 </p> 3562 </td> 3563<td> 3564 <p> 3565 <span class="green">c++11</span> 3566 </p> 3567 </td> 3568<td> 3569 <p> 3570 <span class="green">c++11</span> 3571 </p> 3572 </td> 3573<td> 3574 <p> 3575 <span class="green">c++11</span> 3576 </p> 3577 </td> 3578</tr> 3579<tr> 3580<td> 3581 <p> 3582 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_cv" title="add_member_cv"><code class="literal">add_member_cv</code></a> 3583 </p> 3584 </td> 3585<td> 3586 <p> 3587 <span class="green">c++11</span> 3588 </p> 3589 </td> 3590<td> 3591 <p> 3592 <span class="green">c++11</span> 3593 </p> 3594 </td> 3595<td> 3596 <p> 3597 <span class="green">c++11</span> 3598 </p> 3599 </td> 3600<td> 3601 <p> 3602 <span class="green">c++11</span> 3603 </p> 3604 </td> 3605<td> 3606 <p> 3607 <span class="green">c++11</span> 3608 </p> 3609 </td> 3610</tr> 3611<tr> 3612<td> 3613 <p> 3614 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_lvalue_reference" title="add_member_lvalue_reference"><code class="literal">add_member_lvalue_reference</code></a> 3615 </p> 3616 </td> 3617<td> 3618 <p> 3619 <span class="green">c++11</span> 3620 </p> 3621 </td> 3622<td> 3623 <p> 3624 <span class="green">c++11</span> 3625 </p> 3626 </td> 3627<td> 3628 <p> 3629 <span class="green">c++11</span> 3630 </p> 3631 </td> 3632<td> 3633 <p> 3634 <span class="green">c++11</span> 3635 </p> 3636 </td> 3637<td> 3638 <p> 3639 <span class="green">c++11</span> 3640 </p> 3641 </td> 3642</tr> 3643<tr> 3644<td> 3645 <p> 3646 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_rvalue_reference" title="add_member_rvalue_reference"><code class="literal">add_member_rvalue_reference</code></a> 3647 </p> 3648 </td> 3649<td> 3650 <p> 3651 <span class="green">c++11</span> 3652 </p> 3653 </td> 3654<td> 3655 <p> 3656 <span class="green">c++11</span> 3657 </p> 3658 </td> 3659<td> 3660 <p> 3661 <span class="green">c++11</span> 3662 </p> 3663 </td> 3664<td> 3665 <p> 3666 <span class="green">c++11</span> 3667 </p> 3668 </td> 3669<td> 3670 <p> 3671 <span class="green">c++11</span> 3672 </p> 3673 </td> 3674</tr> 3675<tr> 3676<td> 3677 <p> 3678 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_volatile" title="add_member_volatile"><code class="literal">add_member_volatile</code></a> 3679 </p> 3680 </td> 3681<td> 3682 <p> 3683 <span class="green">c++11</span> 3684 </p> 3685 </td> 3686<td> 3687 <p> 3688 <span class="green">c++11</span> 3689 </p> 3690 </td> 3691<td> 3692 <p> 3693 <span class="green">c++11</span> 3694 </p> 3695 </td> 3696<td> 3697 <p> 3698 <span class="green">c++11</span> 3699 </p> 3700 </td> 3701<td> 3702 <p> 3703 <span class="green">c++11</span> 3704 </p> 3705 </td> 3706</tr> 3707<tr> 3708<td> 3709 <p> 3710 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_noexcept" title="add_noexcept"><code class="literal">add_noexcept</code></a> 3711 </p> 3712 </td> 3713<td> 3714 <p> 3715 unknown 3716 </p> 3717 </td> 3718<td> 3719 <p> 3720 <span class="red">static_assert fails on instantiation</span> 3721 </p> 3722 </td> 3723<td> 3724 <p> 3725 <span class="red">static_assert fails on instantiation</span> 3726 </p> 3727 </td> 3728<td> 3729 <p> 3730 <span class="red">static_assert fails on instantiation</span> 3731 </p> 3732 </td> 3733<td> 3734 <p> 3735 <span class="red">static_assert fails on instantiation</span> 3736 </p> 3737 </td> 3738</tr> 3739<tr> 3740<td> 3741 <p> 3742 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_transaction_safe" title="add_transaction_safe"><code class="literal">add_transaction_safe</code></a> 3743 </p> 3744 </td> 3745<td> 3746 <p> 3747 unknown 3748 </p> 3749 </td> 3750<td> 3751 <p> 3752 <span class="red">static_assert fails on instantiation</span> 3753 </p> 3754 </td> 3755<td> 3756 <p> 3757 <span class="red">static_assert fails on instantiation</span> 3758 </p> 3759 </td> 3760<td> 3761 <p> 3762 <span class="red">static_assert fails on instantiation</span> 3763 </p> 3764 </td> 3765<td> 3766 <p> 3767 <span class="red">static_assert fails on instantiation</span> 3768 </p> 3769 </td> 3770</tr> 3771<tr> 3772<td> 3773 <p> 3774 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_varargs" title="add_varargs"><code class="literal">add_varargs</code></a> 3775 </p> 3776 </td> 3777<td> 3778 <p> 3779 <span class="green">c++11</span> 3780 </p> 3781 </td> 3782<td> 3783 <p> 3784 <span class="green">c++11</span> 3785 </p> 3786 </td> 3787<td> 3788 <p> 3789 <span class="green">c++11</span> 3790 </p> 3791 </td> 3792<td> 3793 <p> 3794 <span class="green">c++11</span> 3795 </p> 3796 </td> 3797<td> 3798 <p> 3799 <span class="green">c++11</span> 3800 </p> 3801 </td> 3802</tr> 3803<tr> 3804<td> 3805 <p> 3806 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_apply_member_pointer" title="apply_member_pointer"><code class="literal">apply_member_pointer</code></a> 3807 </p> 3808 </td> 3809<td> 3810 <p> 3811 <span class="green">c++11</span> 3812 </p> 3813 </td> 3814<td> 3815 <p> 3816 <span class="green">c++11</span> 3817 </p> 3818 </td> 3819<td> 3820 <p> 3821 <span class="green">c++11</span> 3822 </p> 3823 </td> 3824<td> 3825 <p> 3826 <span class="green">c++11</span> 3827 </p> 3828 </td> 3829<td> 3830 <p> 3831 <span class="green">c++11</span> 3832 </p> 3833 </td> 3834</tr> 3835<tr> 3836<td> 3837 <p> 3838 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_apply_return" title="apply_return"><code class="literal">apply_return</code></a> 3839 </p> 3840 </td> 3841<td> 3842 <p> 3843 <span class="green">c++11</span> 3844 </p> 3845 </td> 3846<td> 3847 <p> 3848 <span class="green">c++11</span> 3849 </p> 3850 </td> 3851<td> 3852 <p> 3853 <span class="green">c++11</span> 3854 </p> 3855 </td> 3856<td> 3857 <p> 3858 <span class="green">c++11</span> 3859 </p> 3860 </td> 3861<td> 3862 <p> 3863 <span class="green">c++11</span> 3864 </p> 3865 </td> 3866</tr> 3867<tr> 3868<td> 3869 <p> 3870 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_args" title="args"><code class="literal">args</code></a> 3871 </p> 3872 </td> 3873<td> 3874 <p> 3875 <span class="green">c++11</span> 3876 </p> 3877 </td> 3878<td> 3879 <p> 3880 <span class="green">c++11</span> 3881 </p> 3882 </td> 3883<td> 3884 <p> 3885 <span class="green">c++11</span> 3886 </p> 3887 </td> 3888<td> 3889 <p> 3890 <span class="green">c++11</span> 3891 </p> 3892 </td> 3893<td> 3894 <p> 3895 <span class="green">c++11</span> 3896 </p> 3897 </td> 3898</tr> 3899<tr> 3900<td> 3901 <p> 3902 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_class_of" title="class_of"><code class="literal">class_of</code></a> 3903 </p> 3904 </td> 3905<td> 3906 <p> 3907 <span class="green">c++11</span> 3908 </p> 3909 </td> 3910<td> 3911 <p> 3912 <span class="green">c++11</span> 3913 </p> 3914 </td> 3915<td> 3916 <p> 3917 <span class="green">c++11</span> 3918 </p> 3919 </td> 3920<td> 3921 <p> 3922 <span class="green">c++11</span> 3923 </p> 3924 </td> 3925<td> 3926 <p> 3927 <span class="green">c++11</span> 3928 </p> 3929 </td> 3930</tr> 3931<tr> 3932<td> 3933 <p> 3934 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_function_type" title="function_type"><code class="literal">function_type</code></a> 3935 </p> 3936 </td> 3937<td> 3938 <p> 3939 <span class="green">c++11</span> 3940 </p> 3941 </td> 3942<td> 3943 <p> 3944 <span class="green">c++11</span> 3945 </p> 3946 </td> 3947<td> 3948 <p> 3949 <span class="green">c++11</span> 3950 </p> 3951 </td> 3952<td> 3953 <p> 3954 <span class="green">c++11</span> 3955 </p> 3956 </td> 3957<td> 3958 <p> 3959 <span class="green">c++11</span> 3960 </p> 3961 </td> 3962</tr> 3963<tr> 3964<td> 3965 <p> 3966 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_has_member_qualifiers" title="has_member_qualifiers"><code class="literal">has_member_qualifiers</code></a> 3967 </p> 3968 </td> 3969<td> 3970 <p> 3971 <span class="green">c++11</span> 3972 </p> 3973 </td> 3974<td> 3975 <p> 3976 <span class="green">c++11</span> 3977 </p> 3978 </td> 3979<td> 3980 <p> 3981 <span class="green">c++11</span> 3982 </p> 3983 </td> 3984<td> 3985 <p> 3986 <span class="green">c++11</span> 3987 </p> 3988 </td> 3989<td> 3990 <p> 3991 <span class="green">c++11</span> 3992 </p> 3993 </td> 3994</tr> 3995<tr> 3996<td> 3997 <p> 3998 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_has_varargs" title="has_varargs"><code class="literal">has_varargs</code></a> 3999 </p> 4000 </td> 4001<td> 4002 <p> 4003 <span class="green">c++11</span> 4004 </p> 4005 </td> 4006<td> 4007 <p> 4008 <span class="green">c++11</span> 4009 </p> 4010 </td> 4011<td> 4012 <p> 4013 <span class="green">c++11</span> 4014 </p> 4015 </td> 4016<td> 4017 <p> 4018 <span class="green">c++11</span> 4019 </p> 4020 </td> 4021<td> 4022 <p> 4023 <span class="green">c++11</span> 4024 </p> 4025 </td> 4026</tr> 4027<tr> 4028<td> 4029 <p> 4030 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_has_void_return" title="has_void_return"><code class="literal">has_void_return</code></a> 4031 </p> 4032 </td> 4033<td> 4034 <p> 4035 <span class="green">c++11</span> 4036 </p> 4037 </td> 4038<td> 4039 <p> 4040 <span class="green">c++11</span> 4041 </p> 4042 </td> 4043<td> 4044 <p> 4045 <span class="green">c++11</span> 4046 </p> 4047 </td> 4048<td> 4049 <p> 4050 <span class="green">c++11</span> 4051 </p> 4052 </td> 4053<td> 4054 <p> 4055 <span class="green">c++11</span> 4056 </p> 4057 </td> 4058</tr> 4059<tr> 4060<td> 4061 <p> 4062 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_const_member" title="is_const_member"><code class="literal">is_const_member</code></a> 4063 </p> 4064 </td> 4065<td> 4066 <p> 4067 <span class="green">c++11</span> 4068 </p> 4069 </td> 4070<td> 4071 <p> 4072 <span class="green">c++11</span> 4073 </p> 4074 </td> 4075<td> 4076 <p> 4077 <span class="green">c++11</span> 4078 </p> 4079 </td> 4080<td> 4081 <p> 4082 <span class="green">c++11</span> 4083 </p> 4084 </td> 4085<td> 4086 <p> 4087 <span class="green">c++11</span> 4088 </p> 4089 </td> 4090</tr> 4091<tr> 4092<td> 4093 <p> 4094 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_cv_member" title="is_cv_member"><code class="literal">is_cv_member</code></a> 4095 </p> 4096 </td> 4097<td> 4098 <p> 4099 <span class="green">c++11</span> 4100 </p> 4101 </td> 4102<td> 4103 <p> 4104 <span class="green">c++11</span> 4105 </p> 4106 </td> 4107<td> 4108 <p> 4109 <span class="green">c++11</span> 4110 </p> 4111 </td> 4112<td> 4113 <p> 4114 <span class="green">c++11</span> 4115 </p> 4116 </td> 4117<td> 4118 <p> 4119 <span class="green">c++11</span> 4120 </p> 4121 </td> 4122</tr> 4123<tr> 4124<td> 4125 <p> 4126 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_invocable" title="is_invocable"><code class="literal">is_invocable</code></a> 4127 </p> 4128 </td> 4129<td> 4130 <p> 4131 <span class="green">c++11</span> 4132 </p> 4133 </td> 4134<td> 4135 <p> 4136 <span class="green">c++11</span> 4137 </p> 4138 </td> 4139<td> 4140 <p> 4141 <span class="green">c++11</span> 4142 </p> 4143 </td> 4144<td> 4145 <p> 4146 <span class="green">c++11</span> 4147 </p> 4148 </td> 4149<td> 4150 <p> 4151 <span class="green">c++11</span> 4152 </p> 4153 </td> 4154</tr> 4155<tr> 4156<td> 4157 <p> 4158 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_lvalue_reference_member" title="is_lvalue_reference_member"><code class="literal">is_lvalue_reference_member</code></a> 4159 </p> 4160 </td> 4161<td> 4162 <p> 4163 <span class="green">c++11</span> 4164 </p> 4165 </td> 4166<td> 4167 <p> 4168 <span class="green">c++11</span> 4169 </p> 4170 </td> 4171<td> 4172 <p> 4173 <span class="green">c++11</span> 4174 </p> 4175 </td> 4176<td> 4177 <p> 4178 <span class="green">c++11</span> 4179 </p> 4180 </td> 4181<td> 4182 <p> 4183 <span class="green">c++11</span> 4184 </p> 4185 </td> 4186</tr> 4187<tr> 4188<td> 4189 <p> 4190 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_noexcept" title="is_noexcept"><code class="literal">is_noexcept</code></a> 4191 </p> 4192 </td> 4193<td> 4194 <p> 4195 unknown 4196 </p> 4197 </td> 4198<td> 4199 <p> 4200 <span class="gold">c++11</span> (always false) 4201 </p> 4202 </td> 4203<td> 4204 <p> 4205 <span class="gold">c++11</span> (always false) 4206 </p> 4207 </td> 4208<td> 4209 <p> 4210 <span class="gold">c++11</span> (always false) 4211 </p> 4212 </td> 4213<td> 4214 <p> 4215 <span class="gold">c++11</span> (always false) 4216 </p> 4217 </td> 4218</tr> 4219<tr> 4220<td> 4221 <p> 4222 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_reference_member" title="is_reference_member"><code class="literal">is_reference_member</code></a> 4223 </p> 4224 </td> 4225<td> 4226 <p> 4227 <span class="green">c++11</span> 4228 </p> 4229 </td> 4230<td> 4231 <p> 4232 <span class="green">c++11</span> 4233 </p> 4234 </td> 4235<td> 4236 <p> 4237 <span class="green">c++11</span> 4238 </p> 4239 </td> 4240<td> 4241 <p> 4242 <span class="green">c++11</span> 4243 </p> 4244 </td> 4245<td> 4246 <p> 4247 <span class="green">c++11</span> 4248 </p> 4249 </td> 4250</tr> 4251<tr> 4252<td> 4253 <p> 4254 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_rvalue_reference_member" title="is_rvalue_reference_member"><code class="literal">is_rvalue_reference_member</code></a> 4255 </p> 4256 </td> 4257<td> 4258 <p> 4259 <span class="green">c++11</span> 4260 </p> 4261 </td> 4262<td> 4263 <p> 4264 <span class="green">c++11</span> 4265 </p> 4266 </td> 4267<td> 4268 <p> 4269 <span class="green">c++11</span> 4270 </p> 4271 </td> 4272<td> 4273 <p> 4274 <span class="green">c++11</span> 4275 </p> 4276 </td> 4277<td> 4278 <p> 4279 <span class="green">c++11</span> 4280 </p> 4281 </td> 4282</tr> 4283<tr> 4284<td> 4285 <p> 4286 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_transaction_safe" title="is_transaction_safe"><code class="literal">is_transaction_safe</code></a> 4287 </p> 4288 </td> 4289<td> 4290 <p> 4291 unknown 4292 </p> 4293 </td> 4294<td> 4295 <p> 4296 <span class="gold">c++11</span> (always false) 4297 </p> 4298 </td> 4299<td> 4300 <p> 4301 <span class="gold">c++11</span> (always false) 4302 </p> 4303 </td> 4304<td> 4305 <p> 4306 <span class="gold">c++11</span> (always false) 4307 </p> 4308 </td> 4309<td> 4310 <p> 4311 <span class="gold">c++11</span> (always false) 4312 </p> 4313 </td> 4314</tr> 4315<tr> 4316<td> 4317 <p> 4318 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_volatile_member" title="is_volatile_member"><code class="literal">is_volatile_member</code></a> 4319 </p> 4320 </td> 4321<td> 4322 <p> 4323 <span class="green">c++11</span> 4324 </p> 4325 </td> 4326<td> 4327 <p> 4328 <span class="green">c++11</span> 4329 </p> 4330 </td> 4331<td> 4332 <p> 4333 <span class="green">c++11</span> 4334 </p> 4335 </td> 4336<td> 4337 <p> 4338 <span class="green">c++11</span> 4339 </p> 4340 </td> 4341<td> 4342 <p> 4343 <span class="green">c++11</span> 4344 </p> 4345 </td> 4346</tr> 4347<tr> 4348<td> 4349 <p> 4350 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_qualified_class_of" title="qualified_class_of"><code class="literal">qualified_class_of</code></a> 4351 </p> 4352 </td> 4353<td> 4354 <p> 4355 <span class="green">c++11</span> 4356 </p> 4357 </td> 4358<td> 4359 <p> 4360 <span class="green">c++11</span> 4361 </p> 4362 </td> 4363<td> 4364 <p> 4365 <span class="green">c++11</span> 4366 </p> 4367 </td> 4368<td> 4369 <p> 4370 <span class="green">c++11</span> 4371 </p> 4372 </td> 4373<td> 4374 <p> 4375 <span class="green">c++11</span> 4376 </p> 4377 </td> 4378</tr> 4379<tr> 4380<td> 4381 <p> 4382 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_const" title="remove_member_const"><code class="literal">remove_member_const</code></a> 4383 </p> 4384 </td> 4385<td> 4386 <p> 4387 <span class="green">c++11</span> 4388 </p> 4389 </td> 4390<td> 4391 <p> 4392 <span class="green">c++11</span> 4393 </p> 4394 </td> 4395<td> 4396 <p> 4397 <span class="green">c++11</span> 4398 </p> 4399 </td> 4400<td> 4401 <p> 4402 <span class="green">c++11</span> 4403 </p> 4404 </td> 4405<td> 4406 <p> 4407 <span class="green">c++11</span> 4408 </p> 4409 </td> 4410</tr> 4411<tr> 4412<td> 4413 <p> 4414 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_cv" title="remove_member_cv"><code class="literal">remove_member_cv</code></a> 4415 </p> 4416 </td> 4417<td> 4418 <p> 4419 <span class="green">c++11</span> 4420 </p> 4421 </td> 4422<td> 4423 <p> 4424 <span class="green">c++11</span> 4425 </p> 4426 </td> 4427<td> 4428 <p> 4429 <span class="green">c++11</span> 4430 </p> 4431 </td> 4432<td> 4433 <p> 4434 <span class="green">c++11</span> 4435 </p> 4436 </td> 4437<td> 4438 <p> 4439 <span class="green">c++11</span> 4440 </p> 4441 </td> 4442</tr> 4443<tr> 4444<td> 4445 <p> 4446 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_reference" title="remove_member_reference"><code class="literal">remove_member_reference</code></a> 4447 </p> 4448 </td> 4449<td> 4450 <p> 4451 <span class="green">c++11</span> 4452 </p> 4453 </td> 4454<td> 4455 <p> 4456 <span class="green">c++11</span> 4457 </p> 4458 </td> 4459<td> 4460 <p> 4461 <span class="green">c++11</span> 4462 </p> 4463 </td> 4464<td> 4465 <p> 4466 <span class="green">c++11</span> 4467 </p> 4468 </td> 4469<td> 4470 <p> 4471 <span class="green">c++11</span> 4472 </p> 4473 </td> 4474</tr> 4475<tr> 4476<td> 4477 <p> 4478 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_volatile" title="remove_member_volatile"><code class="literal">remove_member_volatile</code></a> 4479 </p> 4480 </td> 4481<td> 4482 <p> 4483 <span class="green">c++11</span> 4484 </p> 4485 </td> 4486<td> 4487 <p> 4488 <span class="green">c++11</span> 4489 </p> 4490 </td> 4491<td> 4492 <p> 4493 <span class="green">c++11</span> 4494 </p> 4495 </td> 4496<td> 4497 <p> 4498 <span class="green">c++11</span> 4499 </p> 4500 </td> 4501<td> 4502 <p> 4503 <span class="green">c++11</span> 4504 </p> 4505 </td> 4506</tr> 4507<tr> 4508<td> 4509 <p> 4510 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_noexcept" title="remove_noexcept"><code class="literal">remove_noexcept</code></a> 4511 </p> 4512 </td> 4513<td> 4514 <p> 4515 unknown 4516 </p> 4517 </td> 4518<td> 4519 <p> 4520 <span class="gold">c++11</span> (no effect) 4521 </p> 4522 </td> 4523<td> 4524 <p> 4525 <span class="gold">c++11</span> (no effect) 4526 </p> 4527 </td> 4528<td> 4529 <p> 4530 <span class="gold">c++11</span> (no effect) 4531 </p> 4532 </td> 4533<td> 4534 <p> 4535 <span class="gold">c++11</span> (no effect) 4536 </p> 4537 </td> 4538</tr> 4539<tr> 4540<td> 4541 <p> 4542 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_transaction_safe" title="remove_transaction_safe"><code class="literal">remove_transaction_safe</code></a> 4543 </p> 4544 </td> 4545<td> 4546 <p> 4547 unknown 4548 </p> 4549 </td> 4550<td> 4551 <p> 4552 <span class="gold">c++11</span> (no effect) 4553 </p> 4554 </td> 4555<td> 4556 <p> 4557 <span class="gold">c++11</span> (no effect) 4558 </p> 4559 </td> 4560<td> 4561 <p> 4562 <span class="gold">c++11</span> (no effect) 4563 </p> 4564 </td> 4565<td> 4566 <p> 4567 <span class="gold">c++11</span> (no effect) 4568 </p> 4569 </td> 4570</tr> 4571<tr> 4572<td> 4573 <p> 4574 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_varargs" title="remove_varargs"><code class="literal">remove_varargs</code></a> 4575 </p> 4576 </td> 4577<td> 4578 <p> 4579 <span class="green">c++11</span> 4580 </p> 4581 </td> 4582<td> 4583 <p> 4584 <span class="green">c++11</span> 4585 </p> 4586 </td> 4587<td> 4588 <p> 4589 <span class="green">c++11</span> 4590 </p> 4591 </td> 4592<td> 4593 <p> 4594 <span class="green">c++11</span> 4595 </p> 4596 </td> 4597<td> 4598 <p> 4599 <span class="green">c++11</span> 4600 </p> 4601 </td> 4602</tr> 4603<tr> 4604<td> 4605 <p> 4606 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_return_type" title="return_type"><code class="literal">return_type</code></a> 4607 </p> 4608 </td> 4609<td> 4610 <p> 4611 <span class="green">c++11</span> 4612 </p> 4613 </td> 4614<td> 4615 <p> 4616 <span class="green">c++11</span> 4617 </p> 4618 </td> 4619<td> 4620 <p> 4621 <span class="green">c++11</span> 4622 </p> 4623 </td> 4624<td> 4625 <p> 4626 <span class="green">c++11</span> 4627 </p> 4628 </td> 4629<td> 4630 <p> 4631 <span class="green">c++11</span> 4632 </p> 4633 </td> 4634</tr> 4635</tbody> 4636</table></div> 4637</div> 4638<br class="table-break"><div class="table"> 4639<a name="callable_traits.introduction.compatibility.visual_studio_support"></a><p class="title"><b>Table 4. Visual Studio Support</b></p> 4640<div class="table-contents"><table class="table" summary="Visual Studio Support"> 4641<colgroup> 4642<col> 4643<col> 4644<col> 4645</colgroup> 4646<thead><tr> 4647<th> 4648 <p> 4649 feature 4650 </p> 4651 </th> 4652<th> 4653 <p> 4654 MSVC with Visual Studio 2017 4655 </p> 4656 </th> 4657<th> 4658 <p> 4659 MSVC with Visual Studio 2015 (latest update) 4660 </p> 4661 </th> 4662</tr></thead> 4663<tbody> 4664<tr> 4665<td> 4666 <p> 4667 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_const" title="add_member_const"><code class="literal">add_member_const</code></a> 4668 </p> 4669 </td> 4670<td> 4671 <p> 4672 <span class="green">c++11</span> 4673 </p> 4674 </td> 4675<td> 4676 <p> 4677 <span class="green">c++11</span> 4678 </p> 4679 </td> 4680</tr> 4681<tr> 4682<td> 4683 <p> 4684 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_cv" title="add_member_cv"><code class="literal">add_member_cv</code></a> 4685 </p> 4686 </td> 4687<td> 4688 <p> 4689 <span class="green">c++11</span> 4690 </p> 4691 </td> 4692<td> 4693 <p> 4694 <span class="green">c++11</span> 4695 </p> 4696 </td> 4697</tr> 4698<tr> 4699<td> 4700 <p> 4701 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_lvalue_reference" title="add_member_lvalue_reference"><code class="literal">add_member_lvalue_reference</code></a> 4702 </p> 4703 </td> 4704<td> 4705 <p> 4706 <span class="green">c++11</span> 4707 </p> 4708 </td> 4709<td> 4710 <p> 4711 <span class="green">c++11</span> 4712 </p> 4713 </td> 4714</tr> 4715<tr> 4716<td> 4717 <p> 4718 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_rvalue_reference" title="add_member_rvalue_reference"><code class="literal">add_member_rvalue_reference</code></a> 4719 </p> 4720 </td> 4721<td> 4722 <p> 4723 <span class="green">c++11</span> 4724 </p> 4725 </td> 4726<td> 4727 <p> 4728 <span class="green">c++11</span> 4729 </p> 4730 </td> 4731</tr> 4732<tr> 4733<td> 4734 <p> 4735 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_member_volatile" title="add_member_volatile"><code class="literal">add_member_volatile</code></a> 4736 </p> 4737 </td> 4738<td> 4739 <p> 4740 <span class="green">c++11</span> 4741 </p> 4742 </td> 4743<td> 4744 <p> 4745 <span class="green">c++11</span> 4746 </p> 4747 </td> 4748</tr> 4749<tr> 4750<td> 4751 <p> 4752 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_noexcept" title="add_noexcept"><code class="literal">add_noexcept</code></a> 4753 </p> 4754 </td> 4755<td> 4756 <p> 4757 <span class="red">static_assert fails on instantiation</span> 4758 </p> 4759 </td> 4760<td> 4761 <p> 4762 <span class="red">static_assert fails on instantiation</span> 4763 </p> 4764 </td> 4765</tr> 4766<tr> 4767<td> 4768 <p> 4769 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_transaction_safe" title="add_transaction_safe"><code class="literal">add_transaction_safe</code></a> 4770 </p> 4771 </td> 4772<td> 4773 <p> 4774 <span class="red">static_assert fails on instantiation</span> 4775 </p> 4776 </td> 4777<td> 4778 <p> 4779 <span class="red">static_assert fails on instantiation</span> 4780 </p> 4781 </td> 4782</tr> 4783<tr> 4784<td> 4785 <p> 4786 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_add_varargs" title="add_varargs"><code class="literal">add_varargs</code></a> 4787 </p> 4788 </td> 4789<td> 4790 <p> 4791 <span class="green">c++11</span> (define BOOST_DISABLE_WIN32 4792 to disable __cdecl on PMF varargs) 4793 </p> 4794 </td> 4795<td> 4796 <p> 4797 <span class="green">c++11</span> (define BOOST_DISABLE_WIN32 4798 to disable __cdecl on PMF varargs) 4799 </p> 4800 </td> 4801</tr> 4802<tr> 4803<td> 4804 <p> 4805 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_apply_member_pointer" title="apply_member_pointer"><code class="literal">apply_member_pointer</code></a> 4806 </p> 4807 </td> 4808<td> 4809 <p> 4810 <span class="green">c++11</span> 4811 </p> 4812 </td> 4813<td> 4814 <p> 4815 <span class="green">c++11</span> 4816 </p> 4817 </td> 4818</tr> 4819<tr> 4820<td> 4821 <p> 4822 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_apply_return" title="apply_return"><code class="literal">apply_return</code></a> 4823 </p> 4824 </td> 4825<td> 4826 <p> 4827 <span class="green">c++11</span> 4828 </p> 4829 </td> 4830<td> 4831 <p> 4832 <span class="green">c++11</span> 4833 </p> 4834 </td> 4835</tr> 4836<tr> 4837<td> 4838 <p> 4839 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_args" title="args"><code class="literal">args</code></a> 4840 </p> 4841 </td> 4842<td> 4843 <p> 4844 <span class="green">c++11</span> 4845 </p> 4846 </td> 4847<td> 4848 <p> 4849 <span class="green">c++11</span> 4850 </p> 4851 </td> 4852</tr> 4853<tr> 4854<td> 4855 <p> 4856 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_class_of" title="class_of"><code class="literal">class_of</code></a> 4857 </p> 4858 </td> 4859<td> 4860 <p> 4861 <span class="green">c++11</span> 4862 </p> 4863 </td> 4864<td> 4865 <p> 4866 <span class="green">c++11</span> 4867 </p> 4868 </td> 4869</tr> 4870<tr> 4871<td> 4872 <p> 4873 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_function_type" title="function_type"><code class="literal">function_type</code></a> 4874 </p> 4875 </td> 4876<td> 4877 <p> 4878 <span class="green">c++11</span> 4879 </p> 4880 </td> 4881<td> 4882 <p> 4883 <span class="green">c++11</span> 4884 </p> 4885 </td> 4886</tr> 4887<tr> 4888<td> 4889 <p> 4890 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_has_member_qualifiers" title="has_member_qualifiers"><code class="literal">has_member_qualifiers</code></a> 4891 </p> 4892 </td> 4893<td> 4894 <p> 4895 <span class="green">c++11</span> 4896 </p> 4897 </td> 4898<td> 4899 <p> 4900 <span class="green">c++11</span> 4901 </p> 4902 </td> 4903</tr> 4904<tr> 4905<td> 4906 <p> 4907 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_has_varargs" title="has_varargs"><code class="literal">has_varargs</code></a> 4908 </p> 4909 </td> 4910<td> 4911 <p> 4912 <span class="green">c++11</span> (define BOOST_DISABLE_WIN32 4913 to disable __cdecl on PMF varargs) 4914 </p> 4915 </td> 4916<td> 4917 <p> 4918 <span class="green">c++11</span> (define BOOST_DISABLE_WIN32 4919 to disable __cdecl on PMF varargs) 4920 </p> 4921 </td> 4922</tr> 4923<tr> 4924<td> 4925 <p> 4926 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_has_void_return" title="has_void_return"><code class="literal">has_void_return</code></a> 4927 </p> 4928 </td> 4929<td> 4930 <p> 4931 <span class="green">c++11</span> 4932 </p> 4933 </td> 4934<td> 4935 <p> 4936 <span class="green">c++11</span> 4937 </p> 4938 </td> 4939</tr> 4940<tr> 4941<td> 4942 <p> 4943 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_const_member" title="is_const_member"><code class="literal">is_const_member</code></a> 4944 </p> 4945 </td> 4946<td> 4947 <p> 4948 <span class="green">c++11</span> 4949 </p> 4950 </td> 4951<td> 4952 <p> 4953 <span class="green">c++11</span> 4954 </p> 4955 </td> 4956</tr> 4957<tr> 4958<td> 4959 <p> 4960 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_cv_member" title="is_cv_member"><code class="literal">is_cv_member</code></a> 4961 </p> 4962 </td> 4963<td> 4964 <p> 4965 <span class="green">c++11</span> 4966 </p> 4967 </td> 4968<td> 4969 <p> 4970 <span class="green">c++11</span> 4971 </p> 4972 </td> 4973</tr> 4974<tr> 4975<td> 4976 <p> 4977 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_invocable" title="is_invocable"><code class="literal">is_invocable</code></a> 4978 </p> 4979 </td> 4980<td> 4981 <p> 4982 <span class="green">c++11</span> 4983 </p> 4984 </td> 4985<td> 4986 <p> 4987 <span class="gold">c++11</span> (always false for functions 4988 that are simultaneously ref and cv-qualified due to compiler bug) 4989 </p> 4990 </td> 4991</tr> 4992<tr> 4993<td> 4994 <p> 4995 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_lvalue_reference_member" title="is_lvalue_reference_member"><code class="literal">is_lvalue_reference_member</code></a> 4996 </p> 4997 </td> 4998<td> 4999 <p> 5000 <span class="green">c++11</span> 5001 </p> 5002 </td> 5003<td> 5004 <p> 5005 <span class="green">c++11</span> 5006 </p> 5007 </td> 5008</tr> 5009<tr> 5010<td> 5011 <p> 5012 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_noexcept" title="is_noexcept"><code class="literal">is_noexcept</code></a> 5013 </p> 5014 </td> 5015<td> 5016 <p> 5017 <span class="gold">c++11</span> (always false) 5018 </p> 5019 </td> 5020<td> 5021 <p> 5022 <span class="gold">c++11</span> (always false) 5023 </p> 5024 </td> 5025</tr> 5026<tr> 5027<td> 5028 <p> 5029 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_reference_member" title="is_reference_member"><code class="literal">is_reference_member</code></a> 5030 </p> 5031 </td> 5032<td> 5033 <p> 5034 <span class="green">c++11</span> 5035 </p> 5036 </td> 5037<td> 5038 <p> 5039 <span class="green">c++11</span> 5040 </p> 5041 </td> 5042</tr> 5043<tr> 5044<td> 5045 <p> 5046 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_rvalue_reference_member" title="is_rvalue_reference_member"><code class="literal">is_rvalue_reference_member</code></a> 5047 </p> 5048 </td> 5049<td> 5050 <p> 5051 <span class="green">c++11</span> 5052 </p> 5053 </td> 5054<td> 5055 <p> 5056 <span class="green">c++11</span> 5057 </p> 5058 </td> 5059</tr> 5060<tr> 5061<td> 5062 <p> 5063 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_transaction_safe" title="is_transaction_safe"><code class="literal">is_transaction_safe</code></a> 5064 </p> 5065 </td> 5066<td> 5067 <p> 5068 <span class="gold">c++11</span> (always false) 5069 </p> 5070 </td> 5071<td> 5072 <p> 5073 <span class="gold">c++11</span> (always false) 5074 </p> 5075 </td> 5076</tr> 5077<tr> 5078<td> 5079 <p> 5080 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_is_volatile_member" title="is_volatile_member"><code class="literal">is_volatile_member</code></a> 5081 </p> 5082 </td> 5083<td> 5084 <p> 5085 <span class="green">c++11</span> 5086 </p> 5087 </td> 5088<td> 5089 <p> 5090 <span class="green">c++11</span> 5091 </p> 5092 </td> 5093</tr> 5094<tr> 5095<td> 5096 <p> 5097 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_qualified_class_of" title="qualified_class_of"><code class="literal">qualified_class_of</code></a> 5098 </p> 5099 </td> 5100<td> 5101 <p> 5102 <span class="green">c++11</span> 5103 </p> 5104 </td> 5105<td> 5106 <p> 5107 <span class="green">c++11</span> 5108 </p> 5109 </td> 5110</tr> 5111<tr> 5112<td> 5113 <p> 5114 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_const" title="remove_member_const"><code class="literal">remove_member_const</code></a> 5115 </p> 5116 </td> 5117<td> 5118 <p> 5119 <span class="green">c++11</span> 5120 </p> 5121 </td> 5122<td> 5123 <p> 5124 <span class="green">c++11</span> 5125 </p> 5126 </td> 5127</tr> 5128<tr> 5129<td> 5130 <p> 5131 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_cv" title="remove_member_cv"><code class="literal">remove_member_cv</code></a> 5132 </p> 5133 </td> 5134<td> 5135 <p> 5136 <span class="green">c++11</span> 5137 </p> 5138 </td> 5139<td> 5140 <p> 5141 <span class="green">c++11</span> 5142 </p> 5143 </td> 5144</tr> 5145<tr> 5146<td> 5147 <p> 5148 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_reference" title="remove_member_reference"><code class="literal">remove_member_reference</code></a> 5149 </p> 5150 </td> 5151<td> 5152 <p> 5153 <span class="green">c++11</span> 5154 </p> 5155 </td> 5156<td> 5157 <p> 5158 <span class="green">c++11</span> 5159 </p> 5160 </td> 5161</tr> 5162<tr> 5163<td> 5164 <p> 5165 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_member_volatile" title="remove_member_volatile"><code class="literal">remove_member_volatile</code></a> 5166 </p> 5167 </td> 5168<td> 5169 <p> 5170 <span class="green">c++11</span> 5171 </p> 5172 </td> 5173<td> 5174 <p> 5175 <span class="green">c++11</span> 5176 </p> 5177 </td> 5178</tr> 5179<tr> 5180<td> 5181 <p> 5182 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_noexcept" title="remove_noexcept"><code class="literal">remove_noexcept</code></a> 5183 </p> 5184 </td> 5185<td> 5186 <p> 5187 <span class="gold">c++11</span> (no effect) 5188 </p> 5189 </td> 5190<td> 5191 <p> 5192 <span class="gold">c++11</span> (no effect) 5193 </p> 5194 </td> 5195</tr> 5196<tr> 5197<td> 5198 <p> 5199 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_transaction_safe" title="remove_transaction_safe"><code class="literal">remove_transaction_safe</code></a> 5200 </p> 5201 </td> 5202<td> 5203 <p> 5204 <span class="gold">c++11</span> (no effect) 5205 </p> 5206 </td> 5207<td> 5208 <p> 5209 <span class="gold">c++11</span> (no effect) 5210 </p> 5211 </td> 5212</tr> 5213<tr> 5214<td> 5215 <p> 5216 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_remove_varargs" title="remove_varargs"><code class="literal">remove_varargs</code></a> 5217 </p> 5218 </td> 5219<td> 5220 <p> 5221 <span class="green">c++11</span> (define BOOST_DISABLE_WIN32 5222 to disable __cdecl on PMF varargs) 5223 </p> 5224 </td> 5225<td> 5226 <p> 5227 <span class="green">c++11</span> (define BOOST_DISABLE_WIN32 5228 to disable __cdecl on PMF varargs) 5229 </p> 5230 </td> 5231</tr> 5232<tr> 5233<td> 5234 <p> 5235 <a class="link" href="callable_traits/reference.html#callable_traits.reference.ref_return_type" title="return_type"><code class="literal">return_type</code></a> 5236 </p> 5237 </td> 5238<td> 5239 <p> 5240 <span class="green">c++11</span> 5241 </p> 5242 </td> 5243<td> 5244 <p> 5245 <span class="green">c++11</span> 5246 </p> 5247 </td> 5248</tr> 5249</tbody> 5250</table></div> 5251</div> 5252<br class="table-break"> 5253</div> 5254</div> 5255</div> 5256<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 5257<td align="left"></td> 5258<td align="right"><div class="copyright-footer"></div></td> 5259</tr></table> 5260<hr> 5261<div class="spirit-nav"><a accesskey="n" href="callable_traits/reference.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div> 5262</body> 5263</html> 5264