Document improved unary operators.

[CI SKIP]
This commit is contained in:
jzmaddock
2018-08-11 09:50:49 +01:00
parent baad6ce607
commit f78c5330cd
20 changed files with 331 additions and 5 deletions

View File

@ -105,5 +105,7 @@ int main() {
* `volatile` qualifier is not properly handled and would lead to undefined behavior
[prefix_operator_known_issues has_complement..~]
[endsect]

View File

@ -106,5 +106,7 @@ int main() {
* `volatile` qualifier is not properly handled and would lead to undefined behavior
[prefix_operator_known_issues has_post_decrement..--]
[endsect]

View File

@ -106,5 +106,7 @@ int main() {
* `volatile` qualifier is not properly handled and would lead to undefined behavior
[prefix_operator_known_issues has_post_increment..++]
[endsect]

View File

@ -1,4 +1,4 @@
[/
#[/
(C) Copyright 2009-2011 Frederic Bron.
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
@ -106,5 +106,7 @@ int main() {
* `volatile` qualifier is not properly handled and would lead to undefined behavior
[prefix_operator_known_issues has_pre_decrement..--]
[endsect]

View File

@ -106,5 +106,7 @@ int main() {
* `volatile` qualifier is not properly handled and would lead to undefined behavior
[prefix_operator_known_issues has_pre_increment..++]
[endsect]

View File

@ -104,5 +104,7 @@ int main() {
* `volatile` qualifier is not properly handled and would lead to undefined behavior
[prefix_operator_known_issues has_unary_minus..-]
[endsect]

View File

@ -104,5 +104,7 @@ int main() {
* `volatile` qualifier is not properly handled and would lead to undefined behavior
[prefix_operator_known_issues has_unary_plus..+]
[endsect]

View File

@ -168,6 +168,7 @@
<dt><span class="section"><a href="reference/type_identity.html">type_identity</a></span></dt>
<dt><span class="section"><a href="reference/type_with_alignment.html">type_with_alignment</a></span></dt>
</dl></div>
<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"></ol></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>

View File

@ -176,6 +176,44 @@
properly handled and would lead to undefined behavior
</li>
</ul></div>
<p>
<span class="bold"><strong>Known issues:</strong></span>
</p>
<p>
For modern compilers (those that support arbitrary SFINAE-expressions and
decltype/declval) this trait offers near perfect detection. In this situation
the macro <code class="computeroutput"><span class="identifier">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></code>
will be defined after including <code class="literal">&lt;boost/type_traits/has_complement.hpp&gt;</code>.
Please note however, that detection is based on function signature only,
in the case that the operator is a function template then has_complement
cannot perform introspection of the template function body to ensure that
the type meets all of the conceptual requirements of the actual code.
</p>
<p>
For older compilers (<code class="computeroutput"><span class="identifier">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></code>
not defined) then there are a number of issues:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
This trait cannot detect whether unary <code class="computeroutput"><span class="keyword">operator</span></code>~
is public or not: if <code class="computeroutput"><span class="keyword">operator</span></code>~
is defined as a private class member of type T then instantiating <code class="literal">has_complement&lt;T&gt;</code>
will produce a compiler error. For this reason <code class="literal">has_complement</code>
cannot be used to determine whether a type has a public <code class="computeroutput"><span class="keyword">operator</span></code>~ or not.
</li>
<li class="listitem">
<code class="computeroutput"><span class="keyword">volatile</span></code> qualifier is not
properly handled and would lead to undefined behavior
</li>
<li class="listitem">
Capturless lambdas are not supported and will lead to a compiler error
if has_complement is instantiated on the lambda type.
</li>
<li class="listitem">
Scoped enum types are not supported and will lead to a compiler error
if has_complement is instantiated on such a type.
</li>
</ul></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>

View File

@ -182,6 +182,44 @@
properly handled and would lead to undefined behavior
</li>
</ul></div>
<p>
<span class="bold"><strong>Known issues:</strong></span>
</p>
<p>
For modern compilers (those that support arbitrary SFINAE-expressions and
decltype/declval) this trait offers near perfect detection. In this situation
the macro <code class="computeroutput"><span class="identifier">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></code>
will be defined after including <code class="literal">&lt;boost/type_traits/has_post_decrement.hpp&gt;</code>.
Please note however, that detection is based on function signature only,
in the case that the operator is a function template then has_post_decrement
cannot perform introspection of the template function body to ensure that
the type meets all of the conceptual requirements of the actual code.
</p>
<p>
For older compilers (<code class="computeroutput"><span class="identifier">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></code>
not defined) then there are a number of issues:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
This trait cannot detect whether unary <code class="computeroutput"><span class="keyword">operator</span></code>--
is public or not: if <code class="computeroutput"><span class="keyword">operator</span></code>--
is defined as a private class member of type T then instantiating <code class="literal">has_post_decrement&lt;T&gt;</code>
will produce a compiler error. For this reason <code class="literal">has_post_decrement</code>
cannot be used to determine whether a type has a public <code class="computeroutput"><span class="keyword">operator</span></code>-- or not.
</li>
<li class="listitem">
<code class="computeroutput"><span class="keyword">volatile</span></code> qualifier is not
properly handled and would lead to undefined behavior
</li>
<li class="listitem">
Capturless lambdas are not supported and will lead to a compiler error
if has_post_decrement is instantiated on the lambda type.
</li>
<li class="listitem">
Scoped enum types are not supported and will lead to a compiler error
if has_post_decrement is instantiated on such a type.
</li>
</ul></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>

View File

@ -182,6 +182,44 @@
properly handled and would lead to undefined behavior
</li>
</ul></div>
<p>
<span class="bold"><strong>Known issues:</strong></span>
</p>
<p>
For modern compilers (those that support arbitrary SFINAE-expressions and
decltype/declval) this trait offers near perfect detection. In this situation
the macro <code class="computeroutput"><span class="identifier">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></code>
will be defined after including <code class="literal">&lt;boost/type_traits/has_post_increment.hpp&gt;</code>.
Please note however, that detection is based on function signature only,
in the case that the operator is a function template then has_post_increment
cannot perform introspection of the template function body to ensure that
the type meets all of the conceptual requirements of the actual code.
</p>
<p>
For older compilers (<code class="computeroutput"><span class="identifier">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></code>
not defined) then there are a number of issues:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
This trait cannot detect whether unary <code class="computeroutput"><span class="keyword">operator</span></code>++
is public or not: if <code class="computeroutput"><span class="keyword">operator</span></code>++
is defined as a private class member of type T then instantiating <code class="literal">has_post_increment&lt;T&gt;</code>
will produce a compiler error. For this reason <code class="literal">has_post_increment</code>
cannot be used to determine whether a type has a public <code class="computeroutput"><span class="keyword">operator</span></code>++ or not.
</li>
<li class="listitem">
<code class="computeroutput"><span class="keyword">volatile</span></code> qualifier is not
properly handled and would lead to undefined behavior
</li>
<li class="listitem">
Capturless lambdas are not supported and will lead to a compiler error
if has_post_increment is instantiated on the lambda type.
</li>
<li class="listitem">
Scoped enum types are not supported and will lead to a compiler error
if has_post_increment is instantiated on such a type.
</li>
</ul></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>

View File

@ -182,6 +182,44 @@
properly handled and would lead to undefined behavior
</li>
</ul></div>
<p>
<span class="bold"><strong>Known issues:</strong></span>
</p>
<p>
For modern compilers (those that support arbitrary SFINAE-expressions and
decltype/declval) this trait offers near perfect detection. In this situation
the macro <code class="computeroutput"><span class="identifier">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></code>
will be defined after including <code class="literal">&lt;boost/type_traits/has_pre_decrement.hpp&gt;</code>.
Please note however, that detection is based on function signature only,
in the case that the operator is a function template then has_pre_decrement
cannot perform introspection of the template function body to ensure that
the type meets all of the conceptual requirements of the actual code.
</p>
<p>
For older compilers (<code class="computeroutput"><span class="identifier">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></code>
not defined) then there are a number of issues:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
This trait cannot detect whether unary <code class="computeroutput"><span class="keyword">operator</span></code>--
is public or not: if <code class="computeroutput"><span class="keyword">operator</span></code>--
is defined as a private class member of type T then instantiating <code class="literal">has_pre_decrement&lt;T&gt;</code>
will produce a compiler error. For this reason <code class="literal">has_pre_decrement</code>
cannot be used to determine whether a type has a public <code class="computeroutput"><span class="keyword">operator</span></code>-- or not.
</li>
<li class="listitem">
<code class="computeroutput"><span class="keyword">volatile</span></code> qualifier is not
properly handled and would lead to undefined behavior
</li>
<li class="listitem">
Capturless lambdas are not supported and will lead to a compiler error
if has_pre_decrement is instantiated on the lambda type.
</li>
<li class="listitem">
Scoped enum types are not supported and will lead to a compiler error
if has_pre_decrement is instantiated on such a type.
</li>
</ul></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>

View File

@ -182,6 +182,44 @@
properly handled and would lead to undefined behavior
</li>
</ul></div>
<p>
<span class="bold"><strong>Known issues:</strong></span>
</p>
<p>
For modern compilers (those that support arbitrary SFINAE-expressions and
decltype/declval) this trait offers near perfect detection. In this situation
the macro <code class="computeroutput"><span class="identifier">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></code>
will be defined after including <code class="literal">&lt;boost/type_traits/has_pre_increment.hpp&gt;</code>.
Please note however, that detection is based on function signature only,
in the case that the operator is a function template then has_pre_increment
cannot perform introspection of the template function body to ensure that
the type meets all of the conceptual requirements of the actual code.
</p>
<p>
For older compilers (<code class="computeroutput"><span class="identifier">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></code>
not defined) then there are a number of issues:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
This trait cannot detect whether unary <code class="computeroutput"><span class="keyword">operator</span></code>++
is public or not: if <code class="computeroutput"><span class="keyword">operator</span></code>++
is defined as a private class member of type T then instantiating <code class="literal">has_pre_increment&lt;T&gt;</code>
will produce a compiler error. For this reason <code class="literal">has_pre_increment</code>
cannot be used to determine whether a type has a public <code class="computeroutput"><span class="keyword">operator</span></code>++ or not.
</li>
<li class="listitem">
<code class="computeroutput"><span class="keyword">volatile</span></code> qualifier is not
properly handled and would lead to undefined behavior
</li>
<li class="listitem">
Capturless lambdas are not supported and will lead to a compiler error
if has_pre_increment is instantiated on the lambda type.
</li>
<li class="listitem">
Scoped enum types are not supported and will lead to a compiler error
if has_pre_increment is instantiated on such a type.
</li>
</ul></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>

View File

@ -172,6 +172,44 @@
properly handled and would lead to undefined behavior
</li>
</ul></div>
<p>
<span class="bold"><strong>Known issues:</strong></span>
</p>
<p>
For modern compilers (those that support arbitrary SFINAE-expressions and
decltype/declval) this trait offers near perfect detection. In this situation
the macro <code class="computeroutput"><span class="identifier">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></code>
will be defined after including <code class="literal">&lt;boost/type_traits/has_unary_minus.hpp&gt;</code>.
Please note however, that detection is based on function signature only,
in the case that the operator is a function template then has_unary_minus
cannot perform introspection of the template function body to ensure that
the type meets all of the conceptual requirements of the actual code.
</p>
<p>
For older compilers (<code class="computeroutput"><span class="identifier">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></code>
not defined) then there are a number of issues:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
This trait cannot detect whether unary <code class="computeroutput"><span class="keyword">operator</span></code>-
is public or not: if <code class="computeroutput"><span class="keyword">operator</span></code>-
is defined as a private class member of type T then instantiating <code class="literal">has_unary_minus&lt;T&gt;</code>
will produce a compiler error. For this reason <code class="literal">has_unary_minus</code>
cannot be used to determine whether a type has a public <code class="computeroutput"><span class="keyword">operator</span></code>- or not.
</li>
<li class="listitem">
<code class="computeroutput"><span class="keyword">volatile</span></code> qualifier is not
properly handled and would lead to undefined behavior
</li>
<li class="listitem">
Capturless lambdas are not supported and will lead to a compiler error
if has_unary_minus is instantiated on the lambda type.
</li>
<li class="listitem">
Scoped enum types are not supported and will lead to a compiler error
if has_unary_minus is instantiated on such a type.
</li>
</ul></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>

View File

@ -172,6 +172,44 @@
properly handled and would lead to undefined behavior
</li>
</ul></div>
<p>
<span class="bold"><strong>Known issues:</strong></span>
</p>
<p>
For modern compilers (those that support arbitrary SFINAE-expressions and
decltype/declval) this trait offers near perfect detection. In this situation
the macro <code class="computeroutput"><span class="identifier">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></code>
will be defined after including <code class="literal">&lt;boost/type_traits/has_unary_plus.hpp&gt;</code>.
Please note however, that detection is based on function signature only,
in the case that the operator is a function template then has_unary_plus
cannot perform introspection of the template function body to ensure that
the type meets all of the conceptual requirements of the actual code.
</p>
<p>
For older compilers (<code class="computeroutput"><span class="identifier">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></code>
not defined) then there are a number of issues:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
This trait cannot detect whether unary <code class="computeroutput"><span class="keyword">operator</span></code>+
is public or not: if <code class="computeroutput"><span class="keyword">operator</span></code>+
is defined as a private class member of type T then instantiating <code class="literal">has_unary_plus&lt;T&gt;</code>
will produce a compiler error. For this reason <code class="literal">has_unary_plus</code>
cannot be used to determine whether a type has a public <code class="computeroutput"><span class="keyword">operator</span></code>+ or not.
</li>
<li class="listitem">
<code class="computeroutput"><span class="keyword">volatile</span></code> qualifier is not
properly handled and would lead to undefined behavior
</li>
<li class="listitem">
Capturless lambdas are not supported and will lead to a compiler error
if has_unary_plus is instantiated on the lambda type.
</li>
<li class="listitem">
Scoped enum types are not supported and will lead to a compiler error
if has_unary_plus is instantiated on such a type.
</li>
</ul></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>

View File

@ -24,7 +24,7 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="id1109128"></a>Class Index</h2></div></div></div>
<a name="id1116349"></a>Class Index</h2></div></div></div>
<p><a class="link" href="s11.html#idx_id_0">A</a> <a class="link" href="s11.html#idx_id_2">C</a> <a class="link" href="s11.html#idx_id_3">D</a> <a class="link" href="s11.html#idx_id_4">E</a> <a class="link" href="s11.html#idx_id_5">F</a> <a class="link" href="s11.html#idx_id_6">H</a> <a class="link" href="s11.html#idx_id_7">I</a> <a class="link" href="s11.html#idx_id_8">M</a> <a class="link" href="s11.html#idx_id_9">N</a> <a class="link" href="s11.html#idx_id_10">O</a> <a class="link" href="s11.html#idx_id_11">P</a> <a class="link" href="s11.html#idx_id_12">R</a> <a class="link" href="s11.html#idx_id_13">T</a></p>
<div class="variablelist"><dl class="variablelist">
<dt>

View File

@ -24,7 +24,7 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="id1114394"></a>Typedef Index</h2></div></div></div>
<a name="id1120481"></a>Typedef Index</h2></div></div></div>
<p><a class="link" href="s12.html#idx_id_21">F</a> <a class="link" href="s12.html#idx_id_28">R</a> <a class="link" href="s12.html#idx_id_29">T</a> <a class="link" href="s12.html#idx_id_31">V</a></p>
<div class="variablelist"><dl class="variablelist">
<dt>

View File

@ -24,7 +24,7 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="id1114598"></a>Macro Index</h2></div></div></div>
<a name="id1120716"></a>Macro Index</h2></div></div></div>
<p><a class="link" href="s13.html#idx_id_33">B</a></p>
<div class="variablelist"><dl class="variablelist">
<dt>
@ -172,6 +172,7 @@
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_bit_or_assign.html" title="has_bit_or_assign"><span class="index-entry-level-1">has_bit_or_assign</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_bit_xor.html" title="has_bit_xor"><span class="index-entry-level-1">has_bit_xor</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_bit_xor_assign.html" title="has_bit_xor_assign"><span class="index-entry-level-1">has_bit_xor_assign</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_complement.html" title="has_complement"><span class="index-entry-level-1">has_complement</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_divides.html" title="has_divides"><span class="index-entry-level-1">has_divides</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_divides_assign.html" title="has_divides_assign"><span class="index-entry-level-1">has_divides_assign</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_equal_to.html" title="has_equal_to"><span class="index-entry-level-1">has_equal_to</span></a></p></li>
@ -192,8 +193,14 @@
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_not_equal_to.html" title="has_not_equal_to"><span class="index-entry-level-1">has_not_equal_to</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_plus.html" title="has_plus"><span class="index-entry-level-1">has_plus</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_plus_assign.html" title="has_plus_assign"><span class="index-entry-level-1">has_plus_assign</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_post_decrement.html" title="has_post_decrement"><span class="index-entry-level-1">has_post_decrement</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_post_increment.html" title="has_post_increment"><span class="index-entry-level-1">has_post_increment</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_pre_decrement.html" title="has_pre_decrement"><span class="index-entry-level-1">has_pre_decrement</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_pre_increment.html" title="has_pre_increment"><span class="index-entry-level-1">has_pre_increment</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_right_shift.html" title="has_right_shift"><span class="index-entry-level-1">has_right_shift</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_right_shift_assign.html" title="has_right_shift_assign"><span class="index-entry-level-1">has_right_shift_assign</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_unary_minus.html" title="has_unary_minus"><span class="index-entry-level-1">has_unary_minus</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_unary_plus.html" title="has_unary_plus"><span class="index-entry-level-1">has_unary_plus</span></a></p></li>
</ul></div>
</li>
<li class="listitem" style="list-style-type: none">

View File

@ -23,7 +23,7 @@
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="id1115521"></a>Index</h2></div></div></div>
<a name="id1121698"></a>Index</h2></div></div></div>
<p><a class="link" href="s14.html#idx_id_48">A</a> <a class="link" href="s14.html#idx_id_49">B</a> <a class="link" href="s14.html#idx_id_50">C</a> <a class="link" href="s14.html#idx_id_51">D</a> <a class="link" href="s14.html#idx_id_52">E</a> <a class="link" href="s14.html#idx_id_53">F</a> <a class="link" href="s14.html#idx_id_54">H</a> <a class="link" href="s14.html#idx_id_55">I</a> <a class="link" href="s14.html#idx_id_56">M</a> <a class="link" href="s14.html#idx_id_57">N</a> <a class="link" href="s14.html#idx_id_58">O</a> <a class="link" href="s14.html#idx_id_59">P</a> <a class="link" href="s14.html#idx_id_60">R</a> <a class="link" href="s14.html#idx_id_61">T</a> <a class="link" href="s14.html#idx_id_62">U</a> <a class="link" href="s14.html#idx_id_63">V</a></p>
<div class="variablelist"><dl class="variablelist">
<dt>
@ -203,6 +203,7 @@
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_bit_or_assign.html" title="has_bit_or_assign"><span class="index-entry-level-1">has_bit_or_assign</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_bit_xor.html" title="has_bit_xor"><span class="index-entry-level-1">has_bit_xor</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_bit_xor_assign.html" title="has_bit_xor_assign"><span class="index-entry-level-1">has_bit_xor_assign</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_complement.html" title="has_complement"><span class="index-entry-level-1">has_complement</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_divides.html" title="has_divides"><span class="index-entry-level-1">has_divides</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_divides_assign.html" title="has_divides_assign"><span class="index-entry-level-1">has_divides_assign</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_equal_to.html" title="has_equal_to"><span class="index-entry-level-1">has_equal_to</span></a></p></li>
@ -223,8 +224,14 @@
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_not_equal_to.html" title="has_not_equal_to"><span class="index-entry-level-1">has_not_equal_to</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_plus.html" title="has_plus"><span class="index-entry-level-1">has_plus</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_plus_assign.html" title="has_plus_assign"><span class="index-entry-level-1">has_plus_assign</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_post_decrement.html" title="has_post_decrement"><span class="index-entry-level-1">has_post_decrement</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_post_increment.html" title="has_post_increment"><span class="index-entry-level-1">has_post_increment</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_pre_decrement.html" title="has_pre_decrement"><span class="index-entry-level-1">has_pre_decrement</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_pre_increment.html" title="has_pre_increment"><span class="index-entry-level-1">has_pre_increment</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_right_shift.html" title="has_right_shift"><span class="index-entry-level-1">has_right_shift</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_right_shift_assign.html" title="has_right_shift_assign"><span class="index-entry-level-1">has_right_shift_assign</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_unary_minus.html" title="has_unary_minus"><span class="index-entry-level-1">has_unary_minus</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_unary_plus.html" title="has_unary_plus"><span class="index-entry-level-1">has_unary_plus</span></a></p></li>
</ul></div>
</li>
<li class="listitem" style="list-style-type: none">
@ -389,6 +396,7 @@
<li class="listitem" style="list-style-type: none">
<p><span class="index-entry-level-0">has_complement</span></p>
<div class="index"><ul class="index" style="list-style-type: none; ">
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_complement.html" title="has_complement"><span class="index-entry-level-1">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_complement.html" title="has_complement"><span class="index-entry-level-1">dont_care</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../boost_typetraits/reference/has_complement.html" title="has_complement"><span class="index-entry-level-1">has_complement</span></a></strong></span></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_complement.html" title="has_complement"><span class="index-entry-level-1">trait</span></a></p></li>
@ -619,6 +627,7 @@
<li class="listitem" style="list-style-type: none">
<p><span class="index-entry-level-0">has_post_decrement</span></p>
<div class="index"><ul class="index" style="list-style-type: none; ">
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_post_decrement.html" title="has_post_decrement"><span class="index-entry-level-1">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_post_decrement.html" title="has_post_decrement"><span class="index-entry-level-1">dont_care</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../boost_typetraits/reference/has_post_decrement.html" title="has_post_decrement"><span class="index-entry-level-1">has_post_decrement</span></a></strong></span></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_post_decrement.html" title="has_post_decrement"><span class="index-entry-level-1">trait</span></a></p></li>
@ -627,6 +636,7 @@
<li class="listitem" style="list-style-type: none">
<p><span class="index-entry-level-0">has_post_increment</span></p>
<div class="index"><ul class="index" style="list-style-type: none; ">
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_post_increment.html" title="has_post_increment"><span class="index-entry-level-1">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_post_increment.html" title="has_post_increment"><span class="index-entry-level-1">dont_care</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../boost_typetraits/reference/has_post_increment.html" title="has_post_increment"><span class="index-entry-level-1">has_post_increment</span></a></strong></span></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_post_increment.html" title="has_post_increment"><span class="index-entry-level-1">trait</span></a></p></li>
@ -635,6 +645,7 @@
<li class="listitem" style="list-style-type: none">
<p><span class="index-entry-level-0">has_pre_decrement</span></p>
<div class="index"><ul class="index" style="list-style-type: none; ">
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_pre_decrement.html" title="has_pre_decrement"><span class="index-entry-level-1">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_pre_decrement.html" title="has_pre_decrement"><span class="index-entry-level-1">dont_care</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../boost_typetraits/reference/has_pre_decrement.html" title="has_pre_decrement"><span class="index-entry-level-1">has_pre_decrement</span></a></strong></span></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_pre_decrement.html" title="has_pre_decrement"><span class="index-entry-level-1">trait</span></a></p></li>
@ -643,6 +654,7 @@
<li class="listitem" style="list-style-type: none">
<p><span class="index-entry-level-0">has_pre_increment</span></p>
<div class="index"><ul class="index" style="list-style-type: none; ">
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_pre_increment.html" title="has_pre_increment"><span class="index-entry-level-1">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_pre_increment.html" title="has_pre_increment"><span class="index-entry-level-1">dont_care</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../boost_typetraits/reference/has_pre_increment.html" title="has_pre_increment"><span class="index-entry-level-1">has_pre_increment</span></a></strong></span></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_pre_increment.html" title="has_pre_increment"><span class="index-entry-level-1">trait</span></a></p></li>
@ -718,6 +730,7 @@
<li class="listitem" style="list-style-type: none">
<p><span class="index-entry-level-0">has_unary_minus</span></p>
<div class="index"><ul class="index" style="list-style-type: none; ">
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_unary_minus.html" title="has_unary_minus"><span class="index-entry-level-1">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_unary_minus.html" title="has_unary_minus"><span class="index-entry-level-1">dont_care</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../boost_typetraits/reference/has_unary_minus.html" title="has_unary_minus"><span class="index-entry-level-1">has_unary_minus</span></a></strong></span></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/category/value_traits/operators.html" title="Operator Type Traits"><span class="index-entry-level-1">Operator Type Traits</span></a></p></li>
@ -727,6 +740,7 @@
<li class="listitem" style="list-style-type: none">
<p><span class="index-entry-level-0">has_unary_plus</span></p>
<div class="index"><ul class="index" style="list-style-type: none; ">
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_unary_plus.html" title="has_unary_plus"><span class="index-entry-level-1">BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_unary_plus.html" title="has_unary_plus"><span class="index-entry-level-1">dont_care</span></a></p></li>
<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../boost_typetraits/reference/has_unary_plus.html" title="has_unary_plus"><span class="index-entry-level-1">has_unary_plus</span></a></strong></span></p></li>
<li class="listitem" style="list-style-type: none"><p><a class="link" href="../boost_typetraits/reference/has_unary_plus.html" title="has_unary_plus"><span class="index-entry-level-1">trait</span></a></p></li>

View File

@ -227,6 +227,30 @@ convertible to `A`. In this case, the compiler will report an ambiguous overload
* `volatile` qualifier is not properly handled and would lead to undefined behavior
]
[template prefix_operator_known_issues[Name Op]
[*Known issues:]
For modern compilers (those that support arbitrary SFINAE-expressions and decltype/declval) this trait offers near perfect detection.
In this situation the macro `BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION` will be defined after including
[^<boost/type_traits/[Name].hpp>]. Please note however, that detection is based on function signature only,
in the case that the operator is a function template then [Name] cannot perform
introspection of the template function body to ensure that the type meets all of the conceptual requirements of the actual code.
For older compilers (`BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION` not defined) then there are a number of issues:
* This trait cannot detect whether unary `operator`[Op] is public or not:
if `operator`[Op] is defined as a private class member of type T then
instantiating [^[Name]<T>] will produce a compiler error.
For this reason [^[Name]] cannot be used to determine whether a type has a public `operator`[Op] or not.
* `volatile` qualifier is not properly handled and would lead to undefined behavior
* Capturless lambdas are not supported and will lead to a compiler error if [Name] is instantiated
on the lambda type.
* Scoped enum types are not supported and will lead to a compiler error if [Name] is instantiated on such a type.
]
A printer-friendly [@http://sourceforge.net/projects/boost/files/boost-docs/