Update type_traits tests to reflect C++0x.

Make better/simpler use of C++0x intrinsics where available.
Change a few traits to C++0x behaviour.
Update docs to reflect current intrinsic availability.

[SVN r70057]
This commit is contained in:
John Maddock
2011-03-17 13:12:44 +00:00
parent ee29b7660f
commit 087d133793
52 changed files with 434 additions and 220 deletions

View File

@ -22,11 +22,13 @@ These two traits are synonyms for each other.
__compat If the compiler does not support partial-specialization of class
templates, then this template can not be used with function types.
Without some (as yet unspecified) help from the compiler,
Without some (unspecified) help from the compiler,
`has_nothrow_constructor` will never report that a class or struct has a
non-throwing default-constructor; this is always safe, if possibly sub-optimal.
Currently (May 2005) only Visual C++ 8 has the necessary compiler __intrinsics to ensure that this
trait "just works".
Currently (May 2011) compilers more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0,
Intel-11.0, and Codegear have the necessary compiler __intrinsics to ensure that this
trait "just works". You may also test to see if the necessary __intrinsics are available
by checking to see if the macro `BOOST_HAS_NOTHROW_CONSTRUCTOR` is defined.
__header ` #include <boost/type_traits/has_nothrow_constructor.hpp>` or ` #include <boost/type_traits.hpp>`

View File

@ -25,8 +25,10 @@ templates, then this template can not be used with function types.
Without some (as yet unspecified) help from the compiler,
`has_nothrow_copy` will never report that a class or struct has a
non-throwing copy-constructor; this is always safe, if possibly sub-optimal.
Currently (May 2005) only Visual C++ 8 has the necessary compiler __intrinsics to ensure that this
trait "just works".
Currently (May 2011) compilers more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0,
Intel-11.0, and Codegear have the necessary compiler __intrinsics to ensure that this
trait "just works". You may also test to see if the necessary __intrinsics are available
by checking to see if the macro `BOOST_HAS_NOTHROW_COPY` is defined.
__header ` #include <boost/type_traits/has_nothrow_copy.hpp>` or ` #include <boost/type_traits.hpp>`

View File

@ -21,9 +21,12 @@ templates, then this template can not be used with function types.
Without some (as yet unspecified) help from the compiler,
has_trivial_assign will never report that a user-defined class or struct has a
trivial constructor; this is always safe, if possibly sub-optimal. Currently
(May 2005) only MWCW 9 and Visual C++ 8 have the necessary compiler __intrinsics to detect
user-defined classes with trivial constructors.
trivial constructor; this is always safe, if possibly sub-optimal.
Currently (May 2011) compilers more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0,
Intel-11.0, and Codegear have the necessary compiler __intrinsics to ensure that this
trait "just works". You may also test to see if the necessary __intrinsics are available
by checking to see if the macro `BOOST_HAS_TRIVIAL_ASSIGN` is defined.
__std_ref 12.8p11.

View File

@ -29,9 +29,12 @@ templates, then this template can not be used with function types.
Without some (as yet unspecified) help from the compiler,
has_trivial_constructor will never report that a user-defined class or struct has a
trivial constructor; this is always safe, if possibly sub-optimal. Currently
(May 2005) only MWCW 9 and Visual C++ 8 have the necessary compiler __intrinsics to detect
user-defined classes with trivial constructors.
trivial constructor; this is always safe, if possibly sub-optimal.
Currently (May 2011) compilers more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0,
Intel-11.0, and Codegear have the necessary compiler __intrinsics to ensure that this
trait "just works". You may also test to see if the necessary __intrinsics are available
by checking to see if the macro `BOOST_HAS_TRIVIAL_CONSTRUCTOR` is defined.
__std_ref 12.1p6.

View File

@ -27,9 +27,12 @@ templates, then this template can not be used with function types.
Without some (as yet unspecified) help from the compiler,
has_trivial_copy will never report that a user-defined class or struct has a
trivial constructor; this is always safe, if possibly sub-optimal. Currently
(May 2005) only MWCW 9 and Visual C++ 8 have the necessary compiler __intrinsics to detect
user-defined classes with trivial constructors.
trivial constructor; this is always safe, if possibly sub-optimal.
Currently (May 2011) compilers more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0,
Intel-11.0, and Codegear have the necessary compiler __intrinsics to ensure that this
trait "just works". You may also test to see if the necessary __intrinsics are available
by checking to see if the macro `BOOST_HAS_TRIVIAL_COPY` is defined.
__std_ref 12.8p6.

View File

@ -23,9 +23,12 @@ templates, then this template can not be used with function types.
Without some (as yet unspecified) help from the compiler,
has_trivial_destructor will never report that a user-defined class or struct has a
trivial destructor; this is always safe, if possibly sub-optimal. Currently
(May 2005) only MWCW 9 and Visual C++ 8 have the necessary compiler __intrinsics to detect
user-defined classes with trivial constructors.
trivial destructor; this is always safe, if possibly sub-optimal.
Currently (May 2011) compilers more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0,
Intel-11.0, and Codegear have the necessary compiler __intrinsics to ensure that this
trait "just works". You may also test to see if the necessary __intrinsics are available
by checking to see if the macro `BOOST_HAS_TRIVIAL_DESTRUCTOR` is defined.
__std_ref 12.4p3.

View File

@ -17,8 +17,12 @@ Technical Report on C++ Library Extensions. However, there is currently no
way to portably implement this trait. The default version provided
always inherits from __false_type, and has to be explicitly specialized for
types with virtual destructors unless the compiler used has compiler __intrinsics
that enable the trait to do the right thing: currently (May 2005) only Visual C++
8 and GCC-4.3 have the necessary __intrinsics.
that enable the trait to do the right thing:
Currently (May 2011) compilers more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0,
Intel-11.0, and Codegear have the necessary compiler __intrinsics to ensure that this
trait "just works". You may also test to see if the necessary __intrinsics are available
by checking to see if the macro `BOOST_HAS_VIRTUAL_DESTRUCTOR` is defined.
__std_ref 12.4.

View File

@ -56,7 +56,7 @@
method available to them.
</p>
<a name="boost_typetraits.background.type_traits"></a><h5>
<a name="id1004448"></a>
<a name="id984377"></a>
<a class="link" href="background.html#boost_typetraits.background.type_traits">Type Traits</a>
</h5>
<p>
@ -84,7 +84,7 @@
given.
</p>
<a name="boost_typetraits.background.implementation"></a><h5>
<a name="id1004511"></a>
<a name="id984441"></a>
<a class="link" href="background.html#boost_typetraits.background.implementation">Implementation</a>
</h5>
<p>
@ -174,7 +174,7 @@
in the default template.
</p>
<a name="boost_typetraits.background.optimized_copy"></a><h5>
<a name="id1012963"></a>
<a name="id992892"></a>
<a class="link" href="background.html#boost_typetraits.background.optimized_copy">Optimized copy</a>
</h5>
<p>
@ -247,7 +247,7 @@
otherwise it will call the "slow but safe version".
</p>
<a name="boost_typetraits.background.was_it_worth_it_"></a><h5>
<a name="id1013329"></a>
<a name="id993258"></a>
<a class="link" href="background.html#boost_typetraits.background.was_it_worth_it_">Was it worth it?</a>
</h5>
<p>
@ -379,7 +379,7 @@
</table></div>
</div>
<br class="table-break"><a name="boost_typetraits.background.pair_of_references"></a><h5>
<a name="id1013526"></a>
<a name="id993455"></a>
<a class="link" href="background.html#boost_typetraits.background.pair_of_references">Pair of References</a>
</h5>
<p>
@ -597,7 +597,7 @@
easier to maintain and easier to understand.
</p>
<a name="boost_typetraits.background.conclusion"></a><h5>
<a name="id1014369"></a>
<a name="id994299"></a>
<a class="link" href="background.html#boost_typetraits.background.conclusion">Conclusion</a>
</h5>
<p>
@ -610,7 +610,7 @@
can be optimal as well as generic.
</p>
<a name="boost_typetraits.background.acknowledgements"></a><h5>
<a name="id1014386"></a>
<a name="id994316"></a>
<a class="link" href="background.html#boost_typetraits.background.acknowledgements">Acknowledgements</a>
</h5>
<p>
@ -618,7 +618,7 @@
comments when preparing this article.
</p>
<a name="boost_typetraits.background._anchor_id__background_references____references"></a><h5>
<a name="id1014403"></a>
<a name="id994332"></a>
<a class="link" href="background.html#boost_typetraits.background._anchor_id__background_references____references"><a name="background.references"></a> References</a>
</h5>
<div class="orderedlist"><ol type="1">

View File

@ -103,7 +103,7 @@
<span class="keyword">struct</span> <a class="link" href="../reference/remove_volatile.html" title="remove_volatile">remove_volatile</a><span class="special">;</span>
</pre>
<a name="boost_typetraits.category.transform.broken_compiler_workarounds_"></a><h5>
<a name="id1018464"></a>
<a name="id998393"></a>
<a class="link" href="transform.html#boost_typetraits.category.transform.broken_compiler_workarounds_">Broken
Compiler Workarounds:</a>
</h5>

View File

@ -27,7 +27,7 @@
<a name="boost_typetraits.history"></a><a class="link" href="history.html" title="History">History</a>
</h2></div></div></div>
<a name="boost_typetraits.history.boost_1_47_0"></a><h5>
<a name="id1076582"></a>
<a name="id1055902"></a>
<a class="link" href="history.html#boost_typetraits.history.boost_1_47_0">Boost 1.47.0</a>
</h5>
<div class="itemizedlist"><ul type="disc">
@ -41,7 +41,7 @@
</li>
</ul></div>
<a name="boost_typetraits.history.boost_1_45_0"></a><h5>
<a name="id1076632"></a>
<a name="id1055953"></a>
<a class="link" href="history.html#boost_typetraits.history.boost_1_45_0">Boost 1.45.0</a>
</h5>
<div class="itemizedlist"><ul type="disc">
@ -57,7 +57,7 @@
</li>
</ul></div>
<a name="boost_typetraits.history.boost_1_44_0"></a><h5>
<a name="id1076692"></a>
<a name="id1056013"></a>
<a class="link" href="history.html#boost_typetraits.history.boost_1_44_0">Boost 1.44.0</a>
</h5>
<div class="itemizedlist"><ul type="disc">
@ -73,7 +73,7 @@
</li>
</ul></div>
<a name="boost_typetraits.history.boost_1_42_0"></a><h5>
<a name="id1076748"></a>
<a name="id1056068"></a>
<a class="link" href="history.html#boost_typetraits.history.boost_1_42_0">Boost 1.42.0</a>
</h5>
<div class="itemizedlist"><ul type="disc"><li>

View File

@ -73,7 +73,7 @@
template arguments is 3.
</p>
<a name="boost_typetraits.reference.common_type.configuration_macros"></a><h5>
<a name="id1032786"></a>
<a name="id1013334"></a>
<a class="link" href="common_type.html#boost_typetraits.reference.common_type.configuration_macros">Configuration
macros</a>
</h5>
@ -103,7 +103,7 @@
Otherwise when BOOST_COMMON_TYPE_DONT_USE_TYPEOF is not defined it uses Boost.TypeOf.
</p>
<a name="boost_typetraits.reference.common_type.tutorial"></a><h5>
<a name="id1032844"></a>
<a name="id1013392"></a>
<a class="link" href="common_type.html#boost_typetraits.reference.common_type.tutorial">Tutorial</a>
</h5>
<p>
@ -138,7 +138,7 @@
This is a very useful and broadly applicable utility.
</p>
<a name="boost_typetraits.reference.common_type.how_to_get_the_common_type_of_types_with_explicit_conversions_"></a><h5>
<a name="id1033145"></a>
<a name="id1013693"></a>
<a class="link" href="common_type.html#boost_typetraits.reference.common_type.how_to_get_the_common_type_of_types_with_explicit_conversions_">How
to get the common type of types with explicit conversions?</a>
</h5>
@ -160,7 +160,7 @@
<span class="special">};</span>
</pre>
<a name="boost_typetraits.reference.common_type.how_important_is_the_order_of_the_common_type_lt__gt__template_arguments_"></a><h5>
<a name="id1033445"></a>
<a name="id1013993"></a>
<a class="link" href="common_type.html#boost_typetraits.reference.common_type.how_important_is_the_order_of_the_common_type_lt__gt__template_arguments_">How
important is the order of the common_type&lt;&gt; template arguments?</a>
</h5>
@ -240,7 +240,7 @@
<span class="identifier">A</span><span class="special">&gt;</span></code>.
</p>
<a name="boost_typetraits.reference.common_type.can_the_common_type_of_two_types_be_a_third_type_"></a><h5>
<a name="id1034311"></a>
<a name="id1014859"></a>
<a class="link" href="common_type.html#boost_typetraits.reference.common_type.can_the_common_type_of_two_types_be_a_third_type_">Can
the common_type of two types be a third type?</a>
</h5>
@ -267,7 +267,7 @@
<span class="identifier">B</span><span class="special">&gt;</span></code>.
</p>
<a name="boost_typetraits.reference.common_type.how_common_type_behaves_with_pointers_"></a><h5>
<a name="id1034591"></a>
<a name="id1015139"></a>
<a class="link" href="common_type.html#boost_typetraits.reference.common_type.how_common_type_behaves_with_pointers_">How
common_type behaves with pointers?</a>
</h5>
@ -303,7 +303,7 @@
Of course the user can always make this specialization.
</p>
<a name="boost_typetraits.reference.common_type.can_you_explain_the_pros_cons_of_common_type_against_boost_typeof_"></a><h5>
<a name="id1034875"></a>
<a name="id1015423"></a>
<a class="link" href="common_type.html#boost_typetraits.reference.common_type.can_you_explain_the_pros_cons_of_common_type_against_boost_typeof_">Can
you explain the pros/cons of common_type against Boost.Typeof?</a>
</h5>

View File

@ -48,11 +48,15 @@
can not be used with function types.
</p>
<p>
Without some (as yet unspecified) help from the compiler, <code class="computeroutput"><span class="identifier">has_nothrow_constructor</span></code>
Without some (unspecified) help from the compiler, <code class="computeroutput"><span class="identifier">has_nothrow_constructor</span></code>
will never report that a class or struct has a non-throwing default-constructor;
this is always safe, if possibly sub-optimal. Currently (May 2005) only Visual
C++ 8 has the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to ensure that this trait "just works".
this is always safe, if possibly sub-optimal. Currently (May 2011) compilers
more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0, Intel-11.0, and Codegear
have the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to ensure that this trait "just works". You may also test to see
if the necessary <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
are available by checking to see if the macro <code class="computeroutput"><span class="identifier">BOOST_HAS_NOTHROW_CONSTRUCTOR</span></code>
is defined.
</p>
<p>
<span class="bold"><strong>Header:</strong></span> <code class="computeroutput"> <span class="preprocessor">#include</span>

View File

@ -50,9 +50,13 @@
<p>
Without some (as yet unspecified) help from the compiler, <code class="computeroutput"><span class="identifier">has_nothrow_copy</span></code>
will never report that a class or struct has a non-throwing copy-constructor;
this is always safe, if possibly sub-optimal. Currently (May 2005) only Visual
C++ 8 has the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to ensure that this trait "just works".
this is always safe, if possibly sub-optimal. Currently (May 2011) compilers
more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0, Intel-11.0, and Codegear
have the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to ensure that this trait "just works". You may also test to see
if the necessary <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
are available by checking to see if the macro <code class="computeroutput"><span class="identifier">BOOST_HAS_NOTHROW_COPY</span></code>
is defined.
</p>
<p>
<span class="bold"><strong>Header:</strong></span> <code class="computeroutput"> <span class="preprocessor">#include</span>

View File

@ -47,9 +47,13 @@
<p>
Without some (as yet unspecified) help from the compiler, has_trivial_assign
will never report that a user-defined class or struct has a trivial constructor;
this is always safe, if possibly sub-optimal. Currently (May 2005) only MWCW
9 and Visual C++ 8 have the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to detect user-defined classes with trivial constructors.
this is always safe, if possibly sub-optimal. Currently (May 2011) compilers
more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0, Intel-11.0, and Codegear
have the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to ensure that this trait "just works". You may also test to see
if the necessary <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
are available by checking to see if the macro <code class="computeroutput"><span class="identifier">BOOST_HAS_TRIVIAL_ASSIGN</span></code>
is defined.
</p>
<p>
<span class="bold"><strong>C++ Standard Reference:</strong></span> 12.8p11.

View File

@ -55,9 +55,13 @@
<p>
Without some (as yet unspecified) help from the compiler, has_trivial_constructor
will never report that a user-defined class or struct has a trivial constructor;
this is always safe, if possibly sub-optimal. Currently (May 2005) only MWCW
9 and Visual C++ 8 have the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to detect user-defined classes with trivial constructors.
this is always safe, if possibly sub-optimal. Currently (May 2011) compilers
more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0, Intel-11.0, and Codegear
have the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to ensure that this trait "just works". You may also test to see
if the necessary <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
are available by checking to see if the macro <code class="computeroutput"><span class="identifier">BOOST_HAS_TRIVIAL_CONSTRUCTOR</span></code>
is defined.
</p>
<p>
<span class="bold"><strong>C++ Standard Reference:</strong></span> 12.1p6.

View File

@ -53,9 +53,13 @@
<p>
Without some (as yet unspecified) help from the compiler, has_trivial_copy
will never report that a user-defined class or struct has a trivial constructor;
this is always safe, if possibly sub-optimal. Currently (May 2005) only MWCW
9 and Visual C++ 8 have the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to detect user-defined classes with trivial constructors.
this is always safe, if possibly sub-optimal. Currently (May 2011) compilers
more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0, Intel-11.0, and Codegear
have the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to ensure that this trait "just works". You may also test to see
if the necessary <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
are available by checking to see if the macro <code class="computeroutput"><span class="identifier">BOOST_HAS_TRIVIAL_COPY</span></code>
is defined.
</p>
<p>
<span class="bold"><strong>C++ Standard Reference:</strong></span> 12.8p6.

View File

@ -49,9 +49,13 @@
<p>
Without some (as yet unspecified) help from the compiler, has_trivial_destructor
will never report that a user-defined class or struct has a trivial destructor;
this is always safe, if possibly sub-optimal. Currently (May 2005) only MWCW
9 and Visual C++ 8 have the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to detect user-defined classes with trivial constructors.
this is always safe, if possibly sub-optimal. Currently (May 2011) compilers
more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0, Intel-11.0, and Codegear
have the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to ensure that this trait "just works". You may also test to see
if the necessary <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
are available by checking to see if the macro <code class="computeroutput"><span class="identifier">BOOST_HAS_TRIVIAL_DESTRUCTOR</span></code>
is defined.
</p>
<p>
<span class="bold"><strong>C++ Standard Reference:</strong></span> 12.4p3.

View File

@ -41,8 +41,13 @@
trait. The default version provided always inherits from <a class="link" href="integral_constant.html" title="integral_constant">false_type</a>,
and has to be explicitly specialized for types with virtual destructors unless
the compiler used has compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
that enable the trait to do the right thing: currently (May 2005) only Visual
C++ 8 and GCC-4.3 have the necessary <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>.
that enable the trait to do the right thing: Currently (May 2011) compilers
more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0, Intel-11.0, and Codegear
have the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to ensure that this trait "just works". You may also test to see
if the necessary <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
are available by checking to see if the macro <code class="computeroutput"><span class="identifier">BOOST_HAS_VIRTUAL_DESTRUCTOR</span></code>
is defined.
</p>
<p>
<span class="bold"><strong>C++ Standard Reference:</strong></span> 12.4.

View File

@ -47,8 +47,12 @@
yet unspecified) help from the compiler, we cannot distinguish between union
and class types, as a result this type will erroneously inherit from <a class="link" href="integral_constant.html" title="integral_constant">true_type</a> for
union types. See also <a class="link" href="is_union.html" title="is_union">is_union</a>.
Currently (May 2005) only Visual C++ 8 has the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to correctly identify union types, and therefore make is_class function correctly.
Currently (May 2011) compilers more recent than Visual C++ 8, GCC-4.3, Greenhills
6.0, Intel-11.0, and Codegear have the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to ensure that this trait "just works". You may also test to see
if the necessary <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
are available by checking to see if the macro <code class="computeroutput"><span class="identifier">BOOST_IS_CLASS</span></code>
is defined.
</p>
<p>
<span class="bold"><strong>Examples:</strong></span>

View File

@ -52,7 +52,8 @@
</li>
<li>
the compiler providing <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to detect empty classes.
to detect empty classes - this latter case can be tested for by checking
to see if the macro BOOST_IS_EMPTY is defined.
</li>
</ul></div>
<p>

View File

@ -53,10 +53,15 @@
can not be used with function types.
</p>
<p>
Without some (as yet unspecified) help from the compiler, is<span class="underline">pod
will never report that a class or struct is a POD; this is always safe, if
possibly sub-optimal. Currently (May 2005) only MWCW 9 and Visual C++ 8 have
the necessary compiler-</span>_intrinsics.
Without some (as yet unspecified) help from the compiler, is_pod will never
report that a class or struct is a POD; this is always safe, if possibly
sub-optimal. Currently (May 2011) compilers more recent than Visual C++ 8,
GCC-4.3, Greenhills 6.0, Intel-11.0, and Codegear have the necessary compiler
<a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a> to ensure that
this trait "just works". You may also test to see if the necessary
<a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a> are available
by checking to see if the macro <code class="computeroutput"><span class="identifier">BOOST_IS_POD</span></code>
is defined.
</p>
<p>
<span class="bold"><strong>Header:</strong></span> <code class="computeroutput"> <span class="preprocessor">#include</span>

View File

@ -65,9 +65,10 @@
<p>
Without some (as yet unspecified) help from the compiler, is_stateless will
never report that a class or struct is stateless; this is always safe, if
possibly sub-optimal. Currently (May 2005) only MWCW 9 and Visual C++ 8 have
the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to make this template work automatically.
possibly sub-optimal. Currently (May 2011) compilers more recent than Visual
C++ 8, GCC-4.3, Greenhills 6.0, Intel-11.0, and Codegear have the necessary
compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a> to
ensure that this trait "just works".
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>

View File

@ -46,9 +46,13 @@
inherit from <a class="link" href="integral_constant.html" title="integral_constant">true_type</a>,
unless the user explicitly specializes the template for their user-defined
union types, or unless the compiler supplies some unspecified intrinsic that
implements this functionality. Currently (May 2005) only Visual C++ 8 has
implements this functionality. Currently (May 2011) compilers more recent
than Visual C++ 8, GCC-4.3, Greenhills 6.0, Intel-11.0, and Codegear have
the necessary compiler <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
to make this trait "just work" without user intervention.
to ensure that this trait "just works". You may also test to see
if the necessary <a class="link" href="../intrinsics.html" title="Support for Compiler Intrinsics">intrinsics</a>
are available by checking to see if the macro <code class="computeroutput"><span class="identifier">BOOST_IS_UNION</span></code>
is defined.
</p>
<p>
<span class="bold"><strong>Header:</strong></span> <code class="computeroutput"> <span class="preprocessor">#include</span>

View File

@ -30,7 +30,7 @@
Marcus, Itay Maman, John Maddock, Alexander Nasonov, Thorsten Ottosen, Robert
Ramey and Jeremy Siek</p></div>
<div><div class="legalnotice">
<a name="id1004299"></a><p>
<a name="id984228"></a><p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>

View File

@ -24,7 +24,7 @@
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="id1076845"></a>Class Index</h2></div></div></div>
<a name="id1056165"></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_1">C</a> <a class="link" href="s11.html#idx_id_2">D</a> <a class="link" href="s11.html#idx_id_3">E</a> <a class="link" href="s11.html#idx_id_4">F</a> <a class="link" href="s11.html#idx_id_5">H</a> <a class="link" href="s11.html#idx_id_6">I</a> <a class="link" href="s11.html#idx_id_7">M</a> <a class="link" href="s11.html#idx_id_8">P</a> <a class="link" href="s11.html#idx_id_9">R</a> <a class="link" href="s11.html#idx_id_10">T</a> </p>
<div class="variablelist"><dl>
<dt>

View File

@ -24,7 +24,7 @@
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="id1078186"></a>Typedef Index</h2></div></div></div>
<a name="id1059002"></a>Typedef Index</h2></div></div></div>
<p><a class="link" href="s12.html#idx_id_11">F</a> <a class="link" href="s12.html#idx_id_12">R</a> <a class="link" href="s12.html#idx_id_13">T</a> </p>
<div class="variablelist"><dl>
<dt>

View File

@ -24,7 +24,7 @@
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="id1078271"></a>Macro Index</h2></div></div></div>
<a name="id1059087"></a>Macro Index</h2></div></div></div>
<p><a class="link" href="s13.html#idx_id_14">B</a> </p>
<div class="variablelist"><dl>
<dt>
@ -40,37 +40,70 @@
<dt><span class="term">BOOST_HAS_NOTHROW_ASSIGN</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dt><span class="term">BOOST_HAS_NOTHROW_CONSTRUCTOR</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_nothrow_constructor.html" title="has_nothrow_constructor">has_nothrow_constructor</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_HAS_NOTHROW_COPY</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_nothrow_copy.html" title="has_nothrow_copy">has_nothrow_copy</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_HAS_TRIVIAL_ASSIGN</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_assign.html" title="has_trivial_assign">has_trivial_assign</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_HAS_TRIVIAL_CONSTRUCTOR</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_constructor.html" title="has_trivial_constructor">has_trivial_constructor</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_HAS_TRIVIAL_COPY</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_copy.html" title="has_trivial_copy">has_trivial_copy</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_HAS_TRIVIAL_DESTRUCTOR</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_destructor.html" title="has_trivial_destructor">has_trivial_destructor</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_HAS_VIRTUAL_DESTRUCTOR</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_virtual_destructor.html" title="has_virtual_destructor">has_virtual_destructor</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_IS_ABSTRACT</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dt><span class="term">BOOST_IS_BASE_OF</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dt><span class="term">BOOST_IS_CLASS</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/is_class.html" title="is_class">is_class</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_IS_CONVERTIBLE</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dt><span class="term">BOOST_IS_EMPTY</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/is_empty.html" title="is_empty">is_empty</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_IS_ENUM</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dt><span class="term">BOOST_IS_POD</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/is_pod.html" title="is_pod">is_pod</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_IS_POLYMORPHIC</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dt><span class="term">BOOST_IS_UNION</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/is_union.html" title="is_union">is_union</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
</dl></div></dd>
</dl></div>
</div>

View File

@ -23,7 +23,7 @@
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="id1078600"></a>Index</h2></div></div></div>
<a name="id1059482"></a>Index</h2></div></div></div>
<p><a class="link" href="s14.html#idx_id_15">A</a> <a class="link" href="s14.html#idx_id_16">B</a> <a class="link" href="s14.html#idx_id_17">C</a> <a class="link" href="s14.html#idx_id_18">D</a> <a class="link" href="s14.html#idx_id_19">E</a> <a class="link" href="s14.html#idx_id_20">F</a> <a class="link" href="s14.html#idx_id_21">H</a> <a class="link" href="s14.html#idx_id_22">I</a> <a class="link" href="s14.html#idx_id_23">M</a> <a class="link" href="s14.html#idx_id_24">P</a> <a class="link" href="s14.html#idx_id_25">R</a> <a class="link" href="s14.html#idx_id_26">S</a> <a class="link" href="s14.html#idx_id_27">T</a> <a class="link" href="s14.html#idx_id_28">U</a> </p>
<div class="variablelist"><dl>
<dt>
@ -71,37 +71,70 @@
<dt><span class="term">BOOST_HAS_NOTHROW_ASSIGN</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dt><span class="term">BOOST_HAS_NOTHROW_CONSTRUCTOR</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_nothrow_constructor.html" title="has_nothrow_constructor">has_nothrow_constructor</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_HAS_NOTHROW_COPY</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_nothrow_copy.html" title="has_nothrow_copy">has_nothrow_copy</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_HAS_TRIVIAL_ASSIGN</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_assign.html" title="has_trivial_assign">has_trivial_assign</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_HAS_TRIVIAL_CONSTRUCTOR</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_constructor.html" title="has_trivial_constructor">has_trivial_constructor</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_HAS_TRIVIAL_COPY</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_copy.html" title="has_trivial_copy">has_trivial_copy</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_HAS_TRIVIAL_DESTRUCTOR</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_destructor.html" title="has_trivial_destructor">has_trivial_destructor</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_HAS_VIRTUAL_DESTRUCTOR</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_virtual_destructor.html" title="has_virtual_destructor">has_virtual_destructor</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_IS_ABSTRACT</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dt><span class="term">BOOST_IS_BASE_OF</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dt><span class="term">BOOST_IS_CLASS</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/is_class.html" title="is_class">is_class</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_IS_CONVERTIBLE</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dt><span class="term">BOOST_IS_EMPTY</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/is_empty.html" title="is_empty">is_empty</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_IS_ENUM</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dt><span class="term">BOOST_IS_POD</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/is_pod.html" title="is_pod">is_pod</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
<dt><span class="term">BOOST_IS_POLYMORPHIC</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dt><span class="term">BOOST_IS_UNION</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/is_union.html" title="is_union">is_union</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/intrinsics.html#boost_typetraits.intrinsics.macros_for_compiler_intrinsics" title="Table&#160;1.4.&#160;Macros for Compiler Intrinsics">Support for Compiler Intrinsics</a></p></td></tr>
</table></dd>
</dl></div></dd>
<dt>
<a name="idx_id_17"></a><span class="term">C</span>
@ -155,11 +188,13 @@
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/reference/has_nothrow_assign.html" title="has_nothrow_assign">has_nothrow_assign</a></p></td></tr></table></dd>
<dt><span class="term">has_nothrow_constructor</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_nothrow_constructor.html" title="has_nothrow_constructor">BOOST_HAS_NOTHROW_CONSTRUCTOR</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_nothrow_constructor.html" title="has_nothrow_constructor">has_nothrow_constructor</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_nothrow_constructor.html" title="has_nothrow_constructor">has_nothrow_default_constructor</a></p></td></tr>
</table></dd>
<dt><span class="term">has_nothrow_copy</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_nothrow_copy.html" title="has_nothrow_copy">BOOST_HAS_NOTHROW_COPY</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_nothrow_copy.html" title="has_nothrow_copy">has_nothrow_copy</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_nothrow_copy.html" title="has_nothrow_copy">has_nothrow_copy_constructor</a></p></td></tr>
</table></dd>
@ -168,14 +203,19 @@
<dt><span class="term">has_nothrow_default_constructor</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/reference/has_nothrow_constructor.html" title="has_nothrow_constructor">has_nothrow_constructor</a></p></td></tr></table></dd>
<dt><span class="term">has_trivial_assign</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_assign.html" title="has_trivial_assign">has_trivial_assign</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_assign.html" title="has_trivial_assign">BOOST_HAS_TRIVIAL_ASSIGN</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_assign.html" title="has_trivial_assign">has_trivial_assign</a></p></td></tr>
</table></dd>
<dt><span class="term">has_trivial_constructor</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_constructor.html" title="has_trivial_constructor">BOOST_HAS_TRIVIAL_CONSTRUCTOR</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_constructor.html" title="has_trivial_constructor">has_trivial_constructor</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_constructor.html" title="has_trivial_constructor">has_trivial_default_constructor</a></p></td></tr>
</table></dd>
<dt><span class="term">has_trivial_copy</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_copy.html" title="has_trivial_copy">BOOST_HAS_TRIVIAL_COPY</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_copy.html" title="has_trivial_copy">has_trivial_copy</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_copy.html" title="has_trivial_copy">has_trivial_copy_constructor</a></p></td></tr>
</table></dd>
@ -184,9 +224,15 @@
<dt><span class="term">has_trivial_default_constructor</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_constructor.html" title="has_trivial_constructor">has_trivial_constructor</a></p></td></tr></table></dd>
<dt><span class="term">has_trivial_destructor</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_destructor.html" title="has_trivial_destructor">has_trivial_destructor</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_destructor.html" title="has_trivial_destructor">BOOST_HAS_TRIVIAL_DESTRUCTOR</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_trivial_destructor.html" title="has_trivial_destructor">has_trivial_destructor</a></p></td></tr>
</table></dd>
<dt><span class="term">has_virtual_destructor</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/reference/has_virtual_destructor.html" title="has_virtual_destructor">has_virtual_destructor</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_virtual_destructor.html" title="has_virtual_destructor">BOOST_HAS_VIRTUAL_DESTRUCTOR</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/reference/has_virtual_destructor.html" title="has_virtual_destructor">has_virtual_destructor</a></p></td></tr>
</table></dd>
</dl></div></dd>
<dt>
<a name="idx_id_22"></a><span class="term">I</span>
@ -217,6 +263,7 @@
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/reference/is_base_of.html" title="is_base_of">is_base_of</a></p></td></tr></table></dd>
<dt><span class="term">is_class</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/is_class.html" title="is_class">BOOST_IS_CLASS</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/reference/is_class.html" title="is_class">is_class</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/user_defined.html" title="User Defined Specializations">User Defined Specializations</a></p></td></tr>
</table></dd>
@ -229,7 +276,10 @@
<dt><span class="term">is_convertible</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/reference/is_convertible.html" title="is_convertible">is_convertible</a></p></td></tr></table></dd>
<dt><span class="term">is_empty</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/reference/is_empty.html" title="is_empty">is_empty</a></p></td></tr></table></dd>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/is_empty.html" title="is_empty">BOOST_IS_EMPTY</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/reference/is_empty.html" title="is_empty">is_empty</a></p></td></tr>
</table></dd>
<dt><span class="term">is_enum</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/reference/is_enum.html" title="is_enum">is_enum</a></p></td></tr></table></dd>
<dt><span class="term">is_floating_point</span></dt>
@ -255,6 +305,7 @@
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/reference/is_object.html" title="is_object">is_object</a></p></td></tr></table></dd>
<dt><span class="term">is_pod</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/is_pod.html" title="is_pod">BOOST_IS_POD</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/reference/is_pod.html" title="is_pod">is_pod</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/user_defined.html" title="User Defined Specializations">User Defined Specializations</a></p></td></tr>
</table></dd>
@ -279,6 +330,7 @@
<dd><table class="simplelist" border="0" summary="Simple list"><tr><td><p><a class="link" href="../boost_typetraits/reference/is_stateless.html" title="is_stateless">is_stateless</a></p></td></tr></table></dd>
<dt><span class="term">is_union</span></dt>
<dd><table class="simplelist" border="0" summary="Simple list">
<tr><td><p><a class="link" href="../boost_typetraits/reference/is_union.html" title="is_union">BOOST_IS_UNION</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/reference/is_union.html" title="is_union">is_union</a></p></td></tr>
<tr><td><p><a class="link" href="../boost_typetraits/user_defined.html" title="User Defined Specializations">User Defined Specializations</a></p></td></tr>
</table></dd>

View File

@ -19,8 +19,10 @@ __header ` #include <boost/type_traits/is_class.hpp>` or ` #include <boost/type_
__compat Without (some as yet unspecified) help from the compiler,
we cannot distinguish between union and class types, as a result this type
will erroneously inherit from __true_type for union types. See also __is_union.
Currently (May 2005) only Visual C++ 8 has the necessary compiler __intrinsics to
correctly identify union types, and therefore make is_class function correctly.
Currently (May 2011) compilers more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0,
Intel-11.0, and Codegear have the necessary compiler __intrinsics to ensure that this
trait "just works". You may also test to see if the necessary __intrinsics are available
by checking to see if the macro `BOOST_IS_CLASS` is defined.
__examples

View File

@ -19,7 +19,8 @@ __header ` #include <boost/type_traits/is_empty.hpp>` or ` #include <boost/type_
__compat In order to correctly detect empty classes this trait relies on either:
* the compiler implementing zero sized empty base classes, or
* the compiler providing __intrinsics to detect empty classes.
* the compiler providing __intrinsics to detect empty classes - this latter case can be tested for
by checking to see if the macro BOOST_IS_EMPTY is defined.
Can not be used with incomplete types.

View File

@ -28,8 +28,12 @@ of class templates, then this template can not be used with function types.
Without some (as yet unspecified) help from the compiler, is_pod will
never report that a class or struct is a POD; this is always safe,
if possibly sub-optimal. Currently (May 2005) only MWCW 9 and Visual C++ 8 have the
necessary compiler-__intrinsics.
if possibly sub-optimal.
Currently (May 2011) compilers more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0,
Intel-11.0, and Codegear have the necessary compiler __intrinsics to ensure that this
trait "just works". You may also test to see if the necessary __intrinsics are available
by checking to see if the macro `BOOST_IS_POD` is defined.
__header ` #include <boost/type_traits/is_pod.hpp>` or ` #include <boost/type_traits.hpp>`

View File

@ -33,8 +33,10 @@ then this template can not be used with function types.
Without some (as yet unspecified) help from the compiler, is_stateless will never
report that a class or struct is stateless; this is always safe,
if possibly sub-optimal. Currently (May 2005) only MWCW 9 and Visual C++ 8 have the necessary
compiler __intrinsics to make this template work automatically.
if possibly sub-optimal.
Currently (May 2011) compilers more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0,
Intel-11.0, and Codegear have the necessary compiler __intrinsics to ensure that this
trait "just works".
[endsect]

View File

@ -19,9 +19,12 @@ __compat Without (some as yet unspecified) help from the
compiler, we cannot distinguish between union and class types using only standard C++,
as a result this type will never inherit from __true_type, unless the user explicitly
specializes the template for their user-defined union types, or unless the compiler
supplies some unspecified intrinsic that implements this functionality. Currently
(May 2005) only Visual C++ 8 has the necessary compiler __intrinsics to make this
trait "just work" without user intervention.
supplies some unspecified intrinsic that implements this functionality.
Currently (May 2011) compilers more recent than Visual C++ 8, GCC-4.3, Greenhills 6.0,
Intel-11.0, and Codegear have the necessary compiler __intrinsics to ensure that this
trait "just works". You may also test to see if the necessary __intrinsics are available
by checking to see if the macro `BOOST_IS_UNION` is defined.
__header ` #include <boost/type_traits/is_union.hpp>` or ` #include <boost/type_traits.hpp>`

View File

@ -20,16 +20,22 @@ namespace detail{
template <class T>
struct has_nothrow_assign_imp{
BOOST_STATIC_CONSTANT(bool, value =
(::boost::type_traits::ice_or<
::boost::has_trivial_assign<T>::value,
BOOST_HAS_NOTHROW_ASSIGN(T)
>::value));
#ifndef BOOST_HAS_NOTHROW_ASSIGN
BOOST_STATIC_CONSTANT(bool, value = ::boost::has_trivial_assign<T>::value);
#else
BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_NOTHROW_ASSIGN(T));
#endif
};
}
BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_assign,T,::boost::detail::has_nothrow_assign_imp<T>::value)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_assign,void,false)
#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_assign,void const,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_assign,void const volatile,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_assign,void volatile,false)
#endif
} // namespace boost

View File

@ -20,11 +20,11 @@ namespace detail{
template <class T>
struct has_nothrow_constructor_imp{
BOOST_STATIC_CONSTANT(bool, value =
(::boost::type_traits::ice_or<
::boost::has_trivial_constructor<T>::value,
BOOST_HAS_NOTHROW_CONSTRUCTOR(T)
>::value));
#ifdef BOOST_HAS_NOTHROW_CONSTRUCTOR
BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_NOTHROW_CONSTRUCTOR(T));
#else
BOOST_STATIC_CONSTANT(bool, value = ::boost::has_trivial_constructor<T>::value);
#endif
};
}
@ -32,6 +32,20 @@ struct has_nothrow_constructor_imp{
BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_constructor,T,::boost::detail::has_nothrow_constructor_imp<T>::value)
BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_default_constructor,T,::boost::detail::has_nothrow_constructor_imp<T>::value)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_constructor,void,false)
#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_constructor,void const,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_constructor,void const volatile,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_constructor,void volatile,false)
#endif
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_default_constructor,void,false)
#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_default_constructor,void const,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_default_constructor,void const volatile,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_default_constructor,void volatile,false)
#endif
} // namespace boost
#include <boost/type_traits/detail/bool_trait_undef.hpp>

View File

@ -20,11 +20,11 @@ namespace detail{
template <class T>
struct has_nothrow_copy_imp{
BOOST_STATIC_CONSTANT(bool, value =
(::boost::type_traits::ice_or<
::boost::has_trivial_copy<T>::value,
BOOST_HAS_NOTHROW_COPY(T)
>::value));
#ifdef BOOST_HAS_NOTHROW_COPY
BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_NOTHROW_COPY(T));
#else
BOOST_STATIC_CONSTANT(bool, value = ::boost::has_trivial_copy<T>::value);
#endif
};
}
@ -32,6 +32,20 @@ struct has_nothrow_copy_imp{
BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_copy,T,::boost::detail::has_nothrow_copy_imp<T>::value)
BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_nothrow_copy_constructor,T,::boost::detail::has_nothrow_copy_imp<T>::value)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy,void,false)
#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy,void const,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy,void const volatile,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy,void volatile,false)
#endif
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy_constructor,void,false)
#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy_constructor,void const,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy_constructor,void const volatile,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_nothrow_copy_constructor,void volatile,false)
#endif
} // namespace boost
#include <boost/type_traits/detail/bool_trait_undef.hpp>

View File

@ -28,20 +28,27 @@ namespace detail {
template <typename T>
struct has_trivial_assign_impl
{
#ifdef BOOST_HAS_TRIVIAL_ASSIGN
BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_TRIVIAL_ASSIGN(T));
#else
BOOST_STATIC_CONSTANT(bool, value =
(::boost::type_traits::ice_and<
::boost::type_traits::ice_or<
::boost::is_pod<T>::value,
BOOST_HAS_TRIVIAL_ASSIGN(T)
>::value,
::boost::type_traits::ice_not< ::boost::is_const<T>::value >::value,
::boost::is_pod<T>::value,
::boost::type_traits::ice_not< ::boost::is_const<T>::value >::value,
::boost::type_traits::ice_not< ::boost::is_volatile<T>::value >::value
>::value));
#endif
};
} // namespace detail
BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_assign,T,::boost::detail::has_trivial_assign_impl<T>::value)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_assign,void,false)
#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_assign,void const,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_assign,void const volatile,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_assign,void volatile,false)
#endif
} // namespace boost

View File

@ -24,11 +24,19 @@ namespace detail {
template <typename T>
struct has_trivial_ctor_impl
{
#ifdef BOOST_HAS_TRIVIAL_CONSTRUCTOR
BOOST_STATIC_CONSTANT(bool, value =
(::boost::type_traits::ice_or<
::boost::is_pod<T>::value,
BOOST_HAS_TRIVIAL_CONSTRUCTOR(T)
>::value));
#else
BOOST_STATIC_CONSTANT(bool, value =
(::boost::type_traits::ice_or<
::boost::is_pod<T>::value,
false
>::value));
#endif
};
} // namespace detail

View File

@ -27,14 +27,15 @@ namespace detail {
template <typename T>
struct has_trivial_copy_impl
{
#ifdef BOOST_HAS_TRIVIAL_COPY
BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_TRIVIAL_COPY(T));
#else
BOOST_STATIC_CONSTANT(bool, value =
(::boost::type_traits::ice_and<
::boost::type_traits::ice_or<
::boost::is_pod<T>::value,
BOOST_HAS_TRIVIAL_COPY(T)
>::value,
::boost::type_traits::ice_not< ::boost::is_volatile<T>::value >::value
::boost::is_pod<T>::value,
::boost::type_traits::ice_not< ::boost::is_volatile<T>::value >::value
>::value));
#endif
};
} // namespace detail
@ -42,6 +43,20 @@ struct has_trivial_copy_impl
BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_copy,T,::boost::detail::has_trivial_copy_impl<T>::value)
BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_copy_constructor,T,::boost::detail::has_trivial_copy_impl<T>::value)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy,void,false)
#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy,void const,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy,void const volatile,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy,void volatile,false)
#endif
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy_constructor,void,false)
#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy_constructor,void const,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy_constructor,void const volatile,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_copy_constructor,void volatile,false)
#endif
} // namespace boost
#include <boost/type_traits/detail/bool_trait_undef.hpp>

View File

@ -24,17 +24,24 @@ namespace detail {
template <typename T>
struct has_trivial_dtor_impl
{
BOOST_STATIC_CONSTANT(bool, value =
(::boost::type_traits::ice_or<
::boost::is_pod<T>::value,
BOOST_HAS_TRIVIAL_DESTRUCTOR(T)
>::value));
#ifdef BOOST_HAS_TRIVIAL_DESTRUCTOR
BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_TRIVIAL_DESTRUCTOR(T));
#else
BOOST_STATIC_CONSTANT(bool, value = ::boost::is_pod<T>::value);
#endif
};
} // namespace detail
BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_trivial_destructor,T,::boost::detail::has_trivial_dtor_impl<T>::value)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_destructor,void,false)
#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_destructor,void const,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_destructor,void const volatile,false)
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(has_trivial_destructor,void volatile,false)
#endif
} // namespace boost
#include <boost/type_traits/detail/bool_trait_undef.hpp>

4
include/boost/type_traits/has_virtual_destructor.hpp Executable file → Normal file
View File

@ -16,7 +16,11 @@
namespace boost {
#ifdef BOOST_HAS_VIRTUAL_DESTRUCTOR
BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_virtual_destructor,T,BOOST_HAS_VIRTUAL_DESTRUCTOR(T))
#else
BOOST_TT_AUX_BOOL_TRAIT_DEF1(has_virtual_destructor,T,false)
#endif
} // namespace boost

View File

@ -33,8 +33,6 @@
// BOOST_HAS_VIRTUAL_DESTRUCTOR(T) should evaluate to true T has a virtual destructor
//
// The following can also be defined: when detected our implementation is greatly simplified.
// Note that unlike the macros above these do not have default definitions, so we can use
// #ifdef MACRONAME to detect when these are available.
//
// BOOST_IS_ABSTRACT(T) true if T is an abstract type
// BOOST_IS_BASE_OF(T,U) true if T is a base class of U
@ -89,12 +87,12 @@
# define BOOST_IS_POD(T) (__is_pod(T) && __has_trivial_constructor(T))
# define BOOST_IS_EMPTY(T) __is_empty(T)
# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)
# define BOOST_HAS_TRIVIAL_COPY(T) __has_trivial_copy(T)
# define BOOST_HAS_TRIVIAL_ASSIGN(T) __has_trivial_assign(T)
# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T)
# define BOOST_HAS_NOTHROW_COPY(T) __has_nothrow_copy(T)
# define BOOST_HAS_NOTHROW_ASSIGN(T) __has_nothrow_assign(T)
# define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T)|| ( ::boost::is_pod<T>::value && !::boost::is_volatile<T>::value))
# define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) || ( ::boost::is_pod<T>::value && ! ::boost::is_const<T>::value && !::boost::is_volatile<T>::value))
# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) || ::boost::is_pod<T>::value)
# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) || ::boost::has_trivial_constructor<T>::value)
# define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T) || ::boost::has_trivial_copy<T>::value)
# define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) || ::boost::has_trivial_assign<T>::value)
# define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)
# define BOOST_IS_ABSTRACT(T) __is_abstract(T)
@ -134,9 +132,9 @@
# define BOOST_IS_UNION(T) __is_union(T)
# define BOOST_IS_POD(T) __is_pod(T)
# define BOOST_IS_EMPTY(T) __is_empty(T)
# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)
# define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && !is_reference<T>::value)
# define BOOST_HAS_TRIVIAL_ASSIGN(T) __has_trivial_assign(T)
# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__has_trivial_constructor(T) && ! ::boost::is_volatile<T>::value)
# define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && !is_reference<T>::value && ! ::boost::is_volatile<T>::value)
# define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && ! ::boost::is_volatile<T>::value)
# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T)
# define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T) && !is_volatile<T>::value && !is_reference<T>::value)
@ -167,8 +165,8 @@
# define BOOST_IS_POD(T) __is_pod(T)
# define BOOST_IS_EMPTY(T) __is_empty(T)
# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)
# define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && !is_reference<T>::value)
# define BOOST_HAS_TRIVIAL_ASSIGN(T) __has_trivial_assign(T)
# define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && !is_reference<T>::value && && !is_volatile<T>::value)
# define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile<T>::value)
# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T)
# define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T) && !is_volatile<T>::value && !is_reference<T>::value)
@ -194,13 +192,13 @@
# define BOOST_IS_UNION(T) __is_union(T)
# define BOOST_IS_POD(T) __is_pod(T)
# define BOOST_IS_EMPTY(T) __is_empty(T)
# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__has_trivial_default_constructor(T) || is_void<T>::value)
# define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy_constructor(T) && !is_volatile<T>::value && !is_reference<T>::value || is_void<T>::value)
# define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile<T>::value || is_void<T>::value)
# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) || is_void<T>::value)
# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_default_constructor(T) || is_void<T>::value)
# define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy_constructor(T) && !is_volatile<T>::value && !is_reference<T>::value || is_void<T>::value)
# define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile<T>::value || is_void<T>::value)
# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__has_trivial_default_constructor(T))
# define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy_constructor(T) && !is_volatile<T>::value && !is_reference<T>::value)
# define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile<T>::value)
# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T))
# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_default_constructor(T))
# define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy_constructor(T) && !is_volatile<T>::value && !is_reference<T>::value)
# define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile<T>::value)
# define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)
# define BOOST_IS_ABSTRACT(T) __is_abstract(T)
@ -214,50 +212,6 @@
# define BOOST_HAS_TYPE_TRAITS_INTRINSICS
#endif
#ifndef BOOST_IS_UNION
# define BOOST_IS_UNION(T) false
#endif
#ifndef BOOST_IS_POD
# define BOOST_IS_POD(T) false
#endif
#ifndef BOOST_IS_EMPTY
# define BOOST_IS_EMPTY(T) false
#endif
#ifndef BOOST_HAS_TRIVIAL_CONSTRUCTOR
# define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) false
#endif
#ifndef BOOST_HAS_TRIVIAL_COPY
# define BOOST_HAS_TRIVIAL_COPY(T) false
#endif
#ifndef BOOST_HAS_TRIVIAL_ASSIGN
# define BOOST_HAS_TRIVIAL_ASSIGN(T) false
#endif
#ifndef BOOST_HAS_TRIVIAL_DESTRUCTOR
# define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) false
#endif
#ifndef BOOST_HAS_NOTHROW_CONSTRUCTOR
# define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) false
#endif
#ifndef BOOST_HAS_NOTHROW_COPY
# define BOOST_HAS_NOTHROW_COPY(T) false
#endif
#ifndef BOOST_HAS_NOTHROW_ASSIGN
# define BOOST_HAS_NOTHROW_ASSIGN(T) false
#endif
#ifndef BOOST_HAS_VIRTUAL_DESTRUCTOR
# define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) false
#endif
#endif // BOOST_TT_INTRINSICS_HPP_INCLUDED

View File

@ -31,6 +31,12 @@
// should be always the last #include directive
#include <boost/type_traits/detail/bool_trait_def.hpp>
#ifndef BOOST_INTERNAL_IS_EMPTY
#define BOOST_INTERNAL_IS_EMPTY(T) false
#else
#define BOOST_INTERNAL_IS_EMPTY(T) BOOST_IS_EMPTY(T)
#endif
namespace boost {
namespace detail {
@ -83,7 +89,7 @@ struct is_empty_impl
bool, value = (
::boost::type_traits::ice_or<
::boost::detail::empty_helper<cvt,::boost::is_class<T>::value>::value
, BOOST_IS_EMPTY(cvt)
, BOOST_INTERNAL_IS_EMPTY(cvt)
>::value
));
};
@ -118,7 +124,7 @@ struct is_empty_impl
, ::boost::is_class<T>::value
, ::boost::is_convertible< r_type,int>::value
>::value
, BOOST_IS_EMPTY(cvt)
, BOOST_INTERNAL_IS_EMPTY(cvt)
>::value));
};
@ -187,14 +193,14 @@ struct is_empty_impl
typedef typename result::type eh_type;
BOOST_STATIC_CONSTANT(bool, value =
(::boost::type_traits::ice_or<eh_type::value, BOOST_IS_EMPTY(T)>::value));
(::boost::type_traits::ice_or<eh_type::value, BOOST_INTERNAL_IS_EMPTY(T)>::value));
};
#else
template <typename T> struct is_empty_impl
{
BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_EMPTY(T));
BOOST_STATIC_CONSTANT(bool, value = BOOST_INTERNAL_IS_EMPTY(T));
};
#endif // BOOST_MSVC6_MEMBER_TEMPLATES
@ -217,5 +223,7 @@ BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_empty,T,::boost::detail::is_empty_impl<T>::value
#include <boost/type_traits/detail/bool_trait_undef.hpp>
#undef BOOST_INTERNAL_IS_EMPTY
#endif // BOOST_TT_IS_EMPTY_HPP_INCLUDED

View File

@ -20,6 +20,12 @@
// should be the last #include
#include <boost/type_traits/detail/bool_trait_def.hpp>
#ifndef BOOST_IS_POD
#define BOOST_INTERNAL_IS_POD(T) false
#else
#define BOOST_INTERNAL_IS_POD(T) BOOST_IS_POD(T)
#endif
namespace boost {
// forward declaration, needed by 'is_pod_array_helper' template below
@ -36,7 +42,7 @@ template <typename T> struct is_pod_impl
(::boost::type_traits::ice_or<
::boost::is_scalar<T>::value,
::boost::is_void<T>::value,
BOOST_IS_POD(T)
BOOST_INTERNAL_IS_POD(T)
>::value));
};
@ -60,7 +66,7 @@ struct is_pod_helper
(::boost::type_traits::ice_or<
::boost::is_scalar<T>::value,
::boost::is_void<T>::value,
BOOST_IS_POD(T)
BOOST_INTERNAL_IS_POD(T)
>::value));
};
};
@ -132,4 +138,6 @@ BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_pod,T,::boost::detail::is_pod_impl<T>::value)
#include <boost/type_traits/detail/bool_trait_undef.hpp>
#undef BOOST_INTERNAL_IS_POD
#endif // BOOST_TT_IS_POD_HPP_INCLUDED

View File

@ -25,7 +25,11 @@ namespace detail {
template <typename T> struct is_union_impl
{
typedef typename remove_cv<T>::type cvt;
#ifdef BOOST_IS_UNION
BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_UNION(cvt));
#else
BOOST_STATIC_CONSTANT(bool, value = false);
#endif
};
#else
//
@ -35,7 +39,11 @@ template <typename T> struct is_union_impl
//
template <typename T> struct is_union_impl
{
#ifdef BOOST_IS_UNION
BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_UNION(T));
#else
BOOST_STATIC_CONSTANT(bool, value = false);
#endif
};
#endif
} // namespace detail

View File

@ -193,7 +193,7 @@ BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_assign<int[3][2]>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_assign<int[2][4][5][6][3]>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_assign<UDT>::value, false);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_assign<empty_UDT>::value, false);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_assign<void>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_assign<void>::value, false);
// cases we would like to succeed but can't implement in the language:
BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::has_nothrow_assign<empty_POD_UDT>::value, true, false);
BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::has_nothrow_assign<POD_UDT>::value, true, false);

View File

@ -151,7 +151,7 @@ BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_constructor<int[3][2]>::value, t
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_constructor<int[2][4][5][6][3]>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_constructor<UDT>::value, false);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_constructor<empty_UDT>::value, false);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_constructor<void>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_constructor<void>::value, false);
// cases we would like to succeed but can't implement in the language:
BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::has_nothrow_constructor<empty_POD_UDT>::value, true, false);
BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::has_nothrow_constructor<POD_UDT>::value, true, false);

View File

@ -189,7 +189,7 @@ BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_copy<int[2]>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_copy<int[3][2]>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_copy<int[2][4][5][6][3]>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_copy<UDT>::value, false);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_copy<void>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_nothrow_copy<void>::value, false);
// cases we would like to succeed but can't implement in the language:
BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::has_nothrow_copy<empty_POD_UDT>::value, true, false);
BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::has_nothrow_copy<POD_UDT>::value, true, false);

View File

@ -185,7 +185,7 @@ BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_assign<int[3][2]>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_assign<int[2][4][5][6][3]>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_assign<UDT>::value, false);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_assign<empty_UDT>::value, false);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_assign<void>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_assign<void>::value, false);
// cases we would like to succeed but can't implement in the language:
BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::has_trivial_assign<empty_POD_UDT>::value, true, false);
BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::has_trivial_assign<POD_UDT>::value, true, false);

View File

@ -185,7 +185,7 @@ BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_copy<int[2]>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_copy<int[3][2]>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_copy<int[2][4][5][6][3]>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_copy<UDT>::value, false);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_copy<void>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_copy<void>::value, false);
// cases we would like to succeed but can't implement in the language:
BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::has_trivial_copy<empty_POD_UDT>::value, true, false);
BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::has_trivial_copy<POD_UDT>::value, true, false);

View File

@ -154,7 +154,7 @@ BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_destructor<int[3][2]>::value, tr
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_destructor<int[2][4][5][6][3]>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_destructor<UDT>::value, false);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_destructor<empty_UDT>::value, false);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_destructor<void>::value, true);
BOOST_CHECK_INTEGRAL_CONSTANT(::tt::has_trivial_destructor<void>::value, false);
// cases we would like to succeed but can't implement in the language:
BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::has_trivial_destructor<empty_POD_UDT>::value, true, false);
BOOST_CHECK_SOFT_INTEGRAL_CONSTANT(::tt::has_trivial_destructor<POD_UDT>::value, true, false);

View File

@ -24,7 +24,7 @@ struct base2 { };
struct middle2 : public virtual base2 { };
struct derived2 : public middle2 { };
#ifndef BOOST_NO_RVALUE_REFERENCES
#if !defined(BOOST_NO_RVALUE_REFERENCES)
template<typename T>
struct test_bug_4530