// (C) Copyright 2008-2009 SDML (www.sdml.info) // // 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) #include #include #include #include using namespace origin; using std::cout; int main() { // Support BOOST_ASSERT(( concept_check< VariableType >::value )); BOOST_ASSERT(( concept_check< ObjectType >::value )); BOOST_ASSERT(( !concept_check< PolymorphicClass >::value )); BOOST_ASSERT(( concept_check< SameType >::value )); BOOST_ASSERT(( !concept_check< SameType >::value )); // True (and False!) BOOST_ASSERT(( concept_check< True >::value )); BOOST_ASSERT(( !concept_check< True >::value )); BOOST_ASSERT(( concept_check< Tautology >::value )); BOOST_ASSERT(( !concept_check< Contradiction >::value )); // Classification BOOST_ASSERT(( concept_check< LvalueReference >::value )); BOOST_ASSERT(( !concept_check< LvalueReference >::value )); BOOST_ASSERT(( !concept_check< LvalueReference >::value )); BOOST_ASSERT(( concept_check< RvalueReference >::value )); BOOST_ASSERT(( !concept_check< RvalueReference >::value )); BOOST_ASSERT(( !concept_check< RvalueReference >::value )); // Destruction BOOST_ASSERT(( concept_check< HasDestructor >::value )); BOOST_ASSERT(( concept_check< HasDestructor >::value )); BOOST_ASSERT(( concept_check< HasVirtualDestructor >::value )); BOOST_ASSERT(( !concept_check< HasVirtualDestructor >::value )); BOOST_ASSERT(( concept_check< NothrowDestructible >::value )); BOOST_ASSERT(( concept_check< TriviallyDestructible >::value )); BOOST_ASSERT(( !concept_check< TriviallyDestructible >::value )); // Construction BOOST_ASSERT(( concept_check< HasConstructor >::value )); BOOST_ASSERT(( concept_check< Constructible >::value )); BOOST_ASSERT(( concept_check< DefaultConstructible >::value )); BOOST_ASSERT(( concept_check< TriviallyDefaultConstructible >::value )); BOOST_ASSERT(( !concept_check< TriviallyDefaultConstructible >::value )); BOOST_ASSERT(( concept_check< MoveConstructible >::value )); BOOST_ASSERT(( concept_check< MoveConstructible >::value )); BOOST_ASSERT(( concept_check< CopyConstructible >::value )); BOOST_ASSERT(( concept_check< TriviallyCopyConstructible >::value )); BOOST_ASSERT(( !concept_check< TriviallyCopyConstructible >::value )); // Operators BOOST_ASSERT(( concept_check< HasEqualTo >::value )); BOOST_ASSERT(( concept_check< HasLess >::value )); BOOST_ASSERT(( concept_check< HasAssign >::value )); BOOST_ASSERT(( concept_check< HasDereference >::value )); BOOST_ASSERT(( !concept_check< HasDereference >::value )); BOOST_ASSERT(( concept_check< HasAddressOf >::value )); BOOST_ASSERT(( concept_check< HasPlus >::value )); // BOOST_ASSERT(( !concept_check< HasSubscript > )); // WRONG // BOOST_ASSERT(( !concept_check< Callable > )); // WRONG BOOST_ASSERT(( concept_check< Callable >::value )); BOOST_ASSERT(( concept_check< Callable, int, int> >::value )); // Copy and Move Assignment BOOST_ASSERT(( concept_check< MoveConstructible >::value )); BOOST_ASSERT(( concept_check< CopyConstructible >::value )); BOOST_ASSERT(( concept_check< TriviallyCopyConstructible >::value )); BOOST_ASSERT(( !concept_check< TriviallyCopyConstructible >::value )); BOOST_ASSERT(( concept_check< HasSwap >::value )); BOOST_ASSERT(( !concept_check< HasSwap >::value )); BOOST_ASSERT(( concept_check< Swappable >::value )); BOOST_ASSERT(( !concept_check< Swappable >::value )); // Conversion // TODO: Is this right? BOOST_ASSERT(( concept_check< ExplicitlyConvertible >::value )); BOOST_ASSERT(( concept_check< Convertible >::value )); // Comparison BOOST_ASSERT(( concept_check< EqualityComparable >::value )); BOOST_ASSERT(( concept_check< LessThanComparable >::value )); // Functions BOOST_ASSERT(( concept_check< Predicate >::value )); BOOST_ASSERT(( concept_check< Predicate, int, int> >::value )); BOOST_ASSERT(( !concept_check< Predicate, int, int> >::value )); BOOST_ASSERT(( concept_check< StrictWeakOrder >::value )); BOOST_ASSERT(( concept_check< StrictWeakOrder, int> >::value )); BOOST_ASSERT(( concept_check< EquivalenceRelation >::value )); BOOST_ASSERT(( concept_check< EquivalenceRelation, int> >::value )); // Memory BOOST_ASSERT(( concept_check< FreeStoreAllocatable >::value )); // Regular BOOST_ASSERT(( concept_check< Semiregular >::value )); BOOST_ASSERT(( concept_check< Regular >::value )); // Arithmetic BOOST_ASSERT(( concept_check< ArithmeticLike >::value )); BOOST_ASSERT(( concept_check< ArithmeticLike >::value )); BOOST_ASSERT(( concept_check< IntegralLike >::value )); BOOST_ASSERT(( !concept_check< IntegralLike >::value )); BOOST_ASSERT(( concept_check< SignedIntegralLike >::value )); BOOST_ASSERT(( !concept_check< SignedIntegralLike >::value )); BOOST_ASSERT(( concept_check< UnsignedIntegralLike >::value )); BOOST_ASSERT(( !concept_check< UnsignedIntegralLike >::value )); BOOST_ASSERT(( concept_check< FloatingPointLike >::value )); BOOST_ASSERT(( !concept_check< FloatingPointLike >::value )); return 0; }