123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- // Copyright David Abrahams 2004. Distributed under 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 <stdio.h>
- #define BOOST_ENABLE_ASSERT_HANDLER
- #include <boost/assert.hpp>
- #include <boost/mpl/assert.hpp>
- #include <boost/python/detail/indirect_traits.hpp>
- #include <boost/mpl/assert.hpp>
- //#define print(expr) printf("%s ==> %s\n", #expr, expr)
- // not all the compilers can handle an incomplete class type here.
- struct X {};
- using namespace boost::python::indirect_traits;
- typedef void (X::*pmf)();
- BOOST_MPL_ASSERT((is_reference_to_function<int (&)()>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_function<int (*)()>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_function<int&>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_function<pmf>));
-
- BOOST_MPL_ASSERT_NOT((is_pointer_to_function<int (&)()>));
- BOOST_MPL_ASSERT((is_pointer_to_function<int (*)()>));
- BOOST_MPL_ASSERT_NOT((is_pointer_to_function<int (*&)()>));
- BOOST_MPL_ASSERT_NOT((is_pointer_to_function<int (*const&)()>));
- BOOST_MPL_ASSERT_NOT((is_pointer_to_function<pmf>));
-
- BOOST_MPL_ASSERT_NOT((is_reference_to_function_pointer<int (&)()>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_function_pointer<int (*)()>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_function_pointer<int&>));
- BOOST_MPL_ASSERT((is_reference_to_function_pointer<int (*&)()>));
- BOOST_MPL_ASSERT((is_reference_to_function_pointer<int (*const&)()>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_function_pointer<pmf>));
- BOOST_MPL_ASSERT((is_reference_to_pointer<int*&>));
- BOOST_MPL_ASSERT((is_reference_to_pointer<int* const&>));
- BOOST_MPL_ASSERT((is_reference_to_pointer<int*volatile&>));
- BOOST_MPL_ASSERT((is_reference_to_pointer<int*const volatile&>));
- BOOST_MPL_ASSERT((is_reference_to_pointer<int const*&>));
- BOOST_MPL_ASSERT((is_reference_to_pointer<int const* const&>));
- BOOST_MPL_ASSERT((is_reference_to_pointer<int const*volatile&>));
- BOOST_MPL_ASSERT((is_reference_to_pointer<int const*const volatile&>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_pointer<pmf>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_pointer<int const volatile>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_pointer<int>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_pointer<int*>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_const<int*&>));
- BOOST_MPL_ASSERT((is_reference_to_const<int* const&>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_const<int*volatile&>));
- BOOST_MPL_ASSERT((is_reference_to_const<int*const volatile&>));
-
- BOOST_MPL_ASSERT_NOT((is_reference_to_const<int const volatile>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_const<int>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_const<int*>));
- BOOST_MPL_ASSERT((is_reference_to_non_const<int*&>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_non_const<int* const&>));
- BOOST_MPL_ASSERT((is_reference_to_non_const<int*volatile&>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_non_const<int*const volatile&>));
-
- BOOST_MPL_ASSERT_NOT((is_reference_to_non_const<int const volatile>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_non_const<int>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_non_const<int*>));
-
- BOOST_MPL_ASSERT_NOT((is_reference_to_volatile<int*&>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_volatile<int* const&>));
- BOOST_MPL_ASSERT((is_reference_to_volatile<int*volatile&>));
- BOOST_MPL_ASSERT((is_reference_to_volatile<int*const volatile&>));
-
- BOOST_MPL_ASSERT_NOT((is_reference_to_volatile<int const volatile>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_volatile<int>));
- BOOST_MPL_ASSERT_NOT((is_reference_to_volatile<int*>));
- namespace tt = boost::python::indirect_traits;
- BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<int>));
- BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<int&>));
- BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<int*>));
-
- BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<pmf>));
- BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<pmf const&>));
-
- BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<X>));
- BOOST_MPL_ASSERT((tt::is_reference_to_class<X&>));
- BOOST_MPL_ASSERT((tt::is_reference_to_class<X const&>));
- BOOST_MPL_ASSERT((tt::is_reference_to_class<X volatile&>));
- BOOST_MPL_ASSERT((tt::is_reference_to_class<X const volatile&>));
-
- BOOST_MPL_ASSERT_NOT((is_pointer_to_class<int>));
- BOOST_MPL_ASSERT_NOT((is_pointer_to_class<int*>));
- BOOST_MPL_ASSERT_NOT((is_pointer_to_class<int&>));
-
- BOOST_MPL_ASSERT_NOT((is_pointer_to_class<X>));
- BOOST_MPL_ASSERT_NOT((is_pointer_to_class<X&>));
- BOOST_MPL_ASSERT_NOT((is_pointer_to_class<pmf>));
- BOOST_MPL_ASSERT_NOT((is_pointer_to_class<pmf const>));
- BOOST_MPL_ASSERT((is_pointer_to_class<X*>));
- BOOST_MPL_ASSERT((is_pointer_to_class<X const*>));
- BOOST_MPL_ASSERT((is_pointer_to_class<X volatile*>));
- BOOST_MPL_ASSERT((is_pointer_to_class<X const volatile*>));
- BOOST_MPL_ASSERT((tt::is_reference_to_member_function_pointer<pmf&>));
- BOOST_MPL_ASSERT((tt::is_reference_to_member_function_pointer<pmf const&>));
- BOOST_MPL_ASSERT((tt::is_reference_to_member_function_pointer<pmf volatile&>));
- BOOST_MPL_ASSERT((tt::is_reference_to_member_function_pointer<pmf const volatile&>));
- BOOST_MPL_ASSERT_NOT((tt::is_reference_to_member_function_pointer<pmf[2]>));
- BOOST_MPL_ASSERT_NOT((tt::is_reference_to_member_function_pointer<pmf(&)[2]>));
- BOOST_MPL_ASSERT_NOT((tt::is_reference_to_member_function_pointer<pmf>));
-
|