bases.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Copyright David Abrahams 2002.
  2. // Distributed under the Boost Software License, Version 1.0. (See
  3. // accompanying file LICENSE_1_0.txt or copy at
  4. // http://www.boost.org/LICENSE_1_0.txt)
  5. #include <boost/python/bases.hpp>
  6. #include <boost/static_assert.hpp>
  7. #include <boost/python/detail/type_traits.hpp>
  8. struct A;
  9. struct B;
  10. template <class X, class Y, class Z>
  11. struct choose_bases
  12. : boost::python::detail::select_bases<
  13. X
  14. , typename boost::python::detail::select_bases<
  15. Y
  16. , typename boost::python::detail::select_bases<Z>::type
  17. >::type>
  18. {
  19. };
  20. int main()
  21. {
  22. BOOST_STATIC_ASSERT((boost::python::detail::specifies_bases<
  23. boost::python::bases<A,B> >::value));
  24. BOOST_STATIC_ASSERT((!boost::python::detail::specifies_bases<
  25. boost::python::bases<A,B>& >::value));
  26. BOOST_STATIC_ASSERT((!boost::python::detail::specifies_bases<
  27. void* >::value));
  28. BOOST_STATIC_ASSERT((!boost::python::detail::specifies_bases<
  29. int >::value));
  30. BOOST_STATIC_ASSERT((!boost::python::detail::specifies_bases<
  31. int[5] >::value));
  32. typedef boost::python::detail::select_bases<
  33. int
  34. , boost::python::detail::select_bases<char*>::type > collected1;
  35. BOOST_STATIC_ASSERT((boost::python::detail::is_same<collected1::type,boost::python::bases<> >::value));
  36. BOOST_STATIC_ASSERT((boost::python::detail::is_same<choose_bases<int,char*,long>::type,boost::python::bases<> >::value));
  37. typedef boost::python::detail::select_bases<
  38. int
  39. , boost::python::detail::select_bases<
  40. boost::python::bases<A,B>
  41. , boost::python::detail::select_bases<
  42. A
  43. >::type
  44. >::type
  45. > collected2;
  46. BOOST_STATIC_ASSERT((boost::python::detail::is_same<collected2::type,boost::python::bases<A,B> >::value));
  47. BOOST_STATIC_ASSERT((boost::python::detail::is_same<choose_bases<int,boost::python::bases<A,B>,long>::type,boost::python::bases<A,B> >::value));
  48. return 0;
  49. }