// (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 #include #include #include #include using std::cout; using namespace origin; template struct viz { }; template std::string vizstr() { return typestr>(); } struct foo { }; struct foo2 { foo2& operator=(foo2&& x) = delete; foo2& operator=(foo2 const& x) = delete; }; struct bar { }; bool operator<(bar const&, bar const&); struct Abs { virtual void foo() = 0; }; struct CallMe { int* operator()() { cout << "()\n"; return 0; } int const* operator()() const { cout << "() const\n"; return 0; } void operator()(int) { cout << "(int)\n"; } char operator()(std::string, std::string) { return 0;}; void operator()(std::string&) { } }; struct Ctorable { Ctorable(int) { } Ctorable(int, char&) { } Ctorable(int, char&, float) { } }; int main() { // Classification BOOST_ASSERT(( is_variable::value )); BOOST_ASSERT(( is_variable::value )); BOOST_ASSERT(( is_variable::value )); BOOST_ASSERT(( is_variable::value )); BOOST_ASSERT(( is_variable::value )); BOOST_ASSERT(( !is_variable::value )); // Ctor/Dtor BOOST_ASSERT(( has_default_constructor::value )); BOOST_ASSERT(( has_move_constructor::value )); BOOST_ASSERT(( has_copy_constructor::value )); BOOST_ASSERT(( !has_constructor::value )); BOOST_ASSERT(( has_constructor::value )); BOOST_ASSERT(( has_default_constructor::value )); BOOST_ASSERT(( has_copy_constructor::value )); BOOST_ASSERT(( has_constructor::value )); BOOST_ASSERT(( has_constructor::value )); BOOST_ASSERT(( has_constructor::value )); BOOST_ASSERT(( has_constructor::value )); // Assignment BOOST_ASSERT(( has_assign::value )); BOOST_ASSERT(( has_assign::value )); BOOST_ASSERT(( !has_assign::value )); BOOST_ASSERT(( !has_assign::value )); BOOST_ASSERT(( has_move_assign::value )); BOOST_ASSERT(( has_copy_assign::value )); BOOST_ASSERT(( has_move_assign::value )); BOOST_ASSERT(( has_copy_assign::value )); BOOST_ASSERT(( !has_move_assign::value )); BOOST_ASSERT(( !has_copy_assign::value )); // Comparison operators BOOST_ASSERT(( has_equal_to::value )); BOOST_ASSERT(( has_not_equal_to::value )); BOOST_ASSERT(( has_less::value )); BOOST_ASSERT(( has_greater::value )); BOOST_ASSERT(( has_less_equal::value )); BOOST_ASSERT(( has_greater_equal::value )); BOOST_ASSERT(( !has_equal_to::value )); BOOST_ASSERT(( !has_not_equal_to::value )); BOOST_ASSERT(( !has_less::value )); BOOST_ASSERT(( !has_greater::value )); BOOST_ASSERT(( !has_less_equal::value )); BOOST_ASSERT(( !has_greater_equal::value )); BOOST_ASSERT(( has_less::value )); BOOST_ASSERT(( !has_less::value )); BOOST_ASSERT(( has_preincrement::value )); BOOST_ASSERT(( has_preincrement< std::vector::iterator >::value )); // Misc. BOOST_ASSERT(( !has_dereference::value )); BOOST_ASSERT(( has_dereference::value )); BOOST_ASSERT(( has_dereference::iterator>::value )); // Call Traits - Result BOOST_ASSERT(( std::is_same::type, int*>::value )); BOOST_ASSERT(( std::is_same::type, int const*>::value )); // Call Traits - Callable BOOST_ASSERT(( is_callable::value )); BOOST_ASSERT(( is_callable::value )); BOOST_ASSERT(( !is_callable::value )); BOOST_ASSERT(( is_callable::value )); BOOST_ASSERT(( is_callable::value )); // BOOST_ASSERT(( is_callable::value )); // Compilation failure BOOST_ASSERT(( is_callable::value )); BOOST_ASSERT(( is_callable::value )); BOOST_ASSERT(( is_callable::value )); BOOST_ASSERT(( is_callable::value )); BOOST_ASSERT(( is_callable::value )); // Should fail? BOOST_ASSERT(( !is_callable::value )); BOOST_ASSERT(( is_callable::value )); BOOST_ASSERT(( is_callable::value )); BOOST_ASSERT(( !is_callable::value )); BOOST_ASSERT(( is_callable::value )); // BOOST_ASSERT(( !is_callable::value )); // string->string& conversion? BOOST_ASSERT(( is_callable::value )); // TODO: More traits assertions. Lot's more assertions. }