libs/python/test/bases.cpp
// Copyright David Abrahams 2002. // 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 <boost/python/bases.hpp> #include <boost/static_assert.hpp> #include <boost/python/detail/type_traits.hpp> struct A; struct B; template <class X, class Y, class Z> struct choose_bases : boost::python::detail::select_bases< X , typename boost::python::detail::select_bases< Y , typename boost::python::detail::select_bases<Z>::type >::type> { }; int main() { BOOST_STATIC_ASSERT((boost::python::detail::specifies_bases< boost::python::bases<A,B> >::value)); BOOST_STATIC_ASSERT((!boost::python::detail::specifies_bases< boost::python::bases<A,B>& >::value)); BOOST_STATIC_ASSERT((!boost::python::detail::specifies_bases< void* >::value)); BOOST_STATIC_ASSERT((!boost::python::detail::specifies_bases< int >::value)); BOOST_STATIC_ASSERT((!boost::python::detail::specifies_bases< int[5] >::value)); typedef boost::python::detail::select_bases< int , boost::python::detail::select_bases<char*>::type > collected1; BOOST_STATIC_ASSERT((boost::python::detail::is_same<collected1::type,boost::python::bases<> >::value)); BOOST_STATIC_ASSERT((boost::python::detail::is_same<choose_bases<int,char*,long>::type,boost::python::bases<> >::value)); typedef boost::python::detail::select_bases< int , boost::python::detail::select_bases< boost::python::bases<A,B> , boost::python::detail::select_bases< A >::type >::type > collected2; BOOST_STATIC_ASSERT((boost::python::detail::is_same<collected2::type,boost::python::bases<A,B> >::value)); BOOST_STATIC_ASSERT((boost::python::detail::is_same<choose_bases<int,boost::python::bases<A,B>,long>::type,boost::python::bases<A,B> >::value)); return 0; }