diff --git a/include/boost/type_traits/is_abstract.hpp b/include/boost/type_traits/is_abstract.hpp new file mode 100755 index 0000000..ad0642c --- /dev/null +++ b/include/boost/type_traits/is_abstract.hpp @@ -0,0 +1,83 @@ +#ifndef BOOST_TT_IS_ABSTRACT_CLASS_HPP +#define BOOST_TT_IS_ABSTRACT_CLASS_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// is_abstract_class.hpp: +// +// (C) Copyright 2002 Rani Sharoni (rani_sharoni@hotmail.com) and Robert Ramey +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org for updates, documentation, and revision history. +// + +// Compile type discovery whether given type is abstract class or not. +// +// Requires DR 337 to be supported by compiler +// (http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_active.html#337). +// +// +// Believed (Jan 2004) to work on: +// - GCC 3.4 +// - VC++ 7.1 +// - compilers with new EDG frontend (Intel C++ 7, Comeau 4.3.2) +// +// Doesn't work on: +// - VC++6, VC++7.0 and less +// - GCC 3.3.X and less +// - Borland C++ 6 and less +// +// +// History: +// - Originally written by Rani Sharoni, see +// http://groups.google.com/groups?selm=df893da6.0207110613.75b2fe90%40posting.google.com +// At this time supported by EDG (Intel C++ 7, Comeau 4.3.2) and VC7.1. +// - Adapted and added into Boost.Serialization library by Robert Ramey +// (starting with submission #10). +// - Jan 2004: GCC 3.4 fixed to suport DR337 (Giovanni Bajo). +// - Jan 2004: modified to be part of Boost.TypeTraits (Pavel Vozenilek). +// + +#include +#include +#include "boost/type_traits/detail/ice_and.hpp" +// should be the last #include +#include "boost/type_traits/detail/bool_trait_def.hpp" + + +namespace boost { +namespace detail{ + +template +struct is_abstract_imp +{ + // Deduction fails if T is void, function type, + // reference type (14.8.2/2)or an abstract class type + // according to review status issue #337 + // + template + static type_traits::no_type check(U (*)[1]); + template + static type_traits::yes_type check(...); + + BOOST_STATIC_CONSTANT(bool, value = + (::boost::type_traits::ice_and< + ::boost::is_class::value, + (sizeof(check(0)) == sizeof(type_traits::yes_type)) + >::value)); +}; + +} + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_abstract,T,::boost::detail::is_abstract_imp::value) + +} // namespace boost + +#include "boost/type_traits/detail/bool_trait_undef.hpp" + +#endif //BOOST_TT_IS_ABSTRACT_CLASS_HPP diff --git a/index.html b/index.html index 92d62db..1657756 100644 --- a/index.html +++ b/index.html @@ -298,20 +298,20 @@   - ::boost::alignment_of<T>::value - + ::boost::alignment_of<T>::value +

Identifies the alignment requirements of T. Actually returns a value that is only guaranteed to be a multiple of the actual alignment requirements of T.

T must be a complete type.

-   -   +   +       - ::boost::is_empty<T>::value - + ::boost::is_empty<T>::value +

True if T is an empty struct or class. If the compiler implements the "zero sized empty base classes" optimisation, then is_empty will correctly guess whether T is empty. Relies upon is_class to determine whether T is a class @@ -319,9 +319,9 @@

T must be a complete type.

-

10p5

+

10p5

-

Relies on the compiler +

Relies on the compiler implementing zero sized empty base classes in order to detect empty classes.

Can not be used with incomplete types.

@@ -334,47 +334,58 @@   - ::boost::is_const<T>::value - Evaluates to true only if T is + ::boost::is_const<T>::value + Evaluates to true only if T is top-level const-qualified. -

3.9.3

+

3.9.3

-   +       - ::boost::is_volatile<T>::value - Evaluates to true only if T is + ::boost::is_volatile<T>::value + Evaluates to true only if T is volatile-qualified. -

3.9.3

+

3.9.3

-   +     + + + ::boost::is_abstract<T>::value + Evaluates true only if T is + abstract class. + 10.3 + Compiler must support DR337 (as Jan + 2004: GCC 3.4,
+       VC++ 7.1, Intel C++ 7, Comeau 4.3.2). + +   - ::boost::is_polymorphic<T>::value - Evaluates to true only if T is a + ::boost::is_polymorphic<T>::value + Evaluates to true only if T is a polymorphic type.

T must be a complete type.

- 10.3 - Requires knowledge of the compilers + 10.3 + Requires knowledge of the compilers ABI, does actually seem to work with the majority of compilers though.     - ::boost::is_pod<T>::value - Evaluates to true only if T is a + ::boost::is_pod<T>::value + Evaluates to true only if T is a cv-qualified POD type.

T must be a complete type.

-

3.9p10

+

3.9p10

9p4

- Without some (as yet unspecified) + 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.

If the compiler does not support partial-specialization of class templates, then this template can not @@ -384,11 +395,11 @@   - ::boost::has_trivial_constructor<T>::value - True if T has a trivial default + ::boost::has_trivial_constructor<T>::value + True if T has a trivial default constructor. - 12.1p5 -

Without some (as yet + 12.1p5 +

Without some (as yet unspecified) help from the compiler, has_trivial_constructor will never report that a class or struct has a trivial constructor; this is always safe, if possibly sub-optimal.

@@ -399,13 +410,13 @@   - ::boost::has_trivial_copy<T>::value - True if T has a trivial copy + ::boost::has_trivial_copy<T>::value + True if T has a trivial copy constructor.

T must be a complete type.

- 12.8p6 -

Without some (as yet + 12.8p6 +

Without some (as yet unspecified) help from the compiler, has_trivial_copy will never report that a class or struct has a trivial copy constructor; this is always safe, if possibly sub-optimal.

@@ -416,13 +427,13 @@   - ::boost::has_trivial_assign<T>::value - True if T has a trivial assignment + ::boost::has_trivial_assign<T>::value + True if T has a trivial assignment operator.

T must be a complete type.

- 12.8p11 -

Without some (as yet + 12.8p11 +

Without some (as yet unspecified) help from the compiler, has_trivial_assign will never report that a class or struct has a trivial assignment operator; this is always safe, if possibly sub-optimal.

@@ -433,12 +444,12 @@   - ::boost::has_trivial_destructor<T>::value - True if T has a trivial destructor. + ::boost::has_trivial_destructor<T>::value + True if T has a trivial destructor.

T must be a complete type.

- 12.4p3 -

Without some (as yet + 12.4p3 +

Without some (as yet unspecified) help from the compiler, has_trivial_destructor will never report that a class or struct has a trivial destructor; this is always safe, if possibly sub-optimal.

@@ -449,13 +460,13 @@   - ::boost::is_stateless<T>::value - True if T is stateless, meaning + ::boost::is_stateless<T>::value + True if T is stateless, meaning that T has no storage and its constructors and destructors are trivial.

T must be a complete type.

-   -

Without some (as yet +   +

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.

diff --git a/test/Jamfile b/test/Jamfile index 5658d8f..dcfd359 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -45,6 +45,7 @@ test-suite type_traits : [ type-traits-run has_trivial_constr_test.cpp ] [ type-traits-run has_trivial_copy_test.cpp ] [ type-traits-run has_trivial_destructor_test.cpp ] +[ type-traits-run is_abstract_test.cpp ] [ type-traits-run is_arithmetic_test.cpp ] [ type-traits-run is_array_test.cpp ] [ type-traits-run is_base_and_derived_test.cpp ] diff --git a/test/is_abstract_test.cpp b/test/is_abstract_test.cpp new file mode 100755 index 0000000..71471fd --- /dev/null +++ b/test/is_abstract_test.cpp @@ -0,0 +1,231 @@ + +// (C) Copyright Pavel Vozenilek 2004. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + + +#include "test.hpp" +#include "check_integral_constant.hpp" +#ifdef TEST_STD +# include +#else +# include +#endif + + +struct TestA {}; +struct TestB { virtual void foo(void) = 0; }; +struct TestC { private: virtual void foo(void) = 0; }; +struct TestD : TestA {}; +struct TestE : TestB {}; +struct TestF : TestC {}; +struct TestG : TestB { virtual void foo(void) {} }; +struct TestH : TestC { private: virtual void foo(void) {} }; +struct TestI : TestB, TestC {}; +struct TestJ : TestI { virtual void foo(void) {} }; +struct TestK : TestB { virtual void foo(void); virtual void foo2(void) = 0; }; +struct TestL : TestK { virtual void foo2(void) {} }; +struct TestM : virtual TestB {}; +struct TestN : virtual TestC {}; +struct TestO : TestM, TestN {}; +struct TestP : TestO { virtual void foo(void) {} }; +struct TestQ : TestB { virtual void foo(void) = 0; }; +struct TestR : TestC { private: virtual void foo(void) = 0; }; +struct TestS { virtual void foo(void) {} }; +struct TestT { virtual ~TestT(void) {} virtual void foo(void) {} }; +struct TestU : TestT { virtual void foo(void) = 0; }; +struct TestV : TestT { virtual void foo(void) {} }; +struct TestW { virtual void foo1(void) = 0; virtual void foo2(void) = 0; }; +struct TestX : TestW { virtual void foo1(void) {} virtual void foo2(void) {} }; +struct TestY { virtual ~TestY(void) = 0; }; +struct TestZ { virtual ~TestZ(void) = 0; }; TestZ::~TestZ(void) {} +struct TestAA : TestZ { virtual ~TestAA(void) = 0; }; TestAA::~TestAA(void) {} +struct TestAB : TestAA { virtual ~TestAB(void) {} }; +struct TestAC { virtual void foo(void) = 0; }; void TestAC::foo(void) {} +struct TestAD : TestAC {}; +struct TestAE : TestAD { virtual void foo() {} }; +struct TestAF : TestAD { virtual void foo(); }; void TestAF::foo(void) {} +struct TestAG : virtual TestA {}; + + +TT_TEST_BEGIN(is_abstract) + +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); // only one method implemented! +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); // ??? +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); + +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); // only one method implemented! +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); // ??? +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); + +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); // only one method implemented! +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); // ??? +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); + +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); // only one method implemented! +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); // ??? +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), true); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); + +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); // only one method implemented! +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); // ??? +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); +BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_abstract::value), false); + +TT_TEST_END + + + + + + +