Chris@16: // Copyright David Abrahams 2002. Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: #ifndef IF_ELSE_DWA2002322_HPP Chris@16: # define IF_ELSE_DWA2002322_HPP Chris@16: # include Chris@16: Chris@16: namespace boost { namespace python { namespace detail { Chris@16: Chris@16: template struct elif_selected; Chris@16: Chris@16: template Chris@16: struct if_selected Chris@16: { Chris@16: template Chris@16: struct elif : elif_selected Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct else_ Chris@16: { Chris@16: typedef T type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: # if defined(BOOST_MSVC) && (BOOST_MSVC == 1300) Chris@16: namespace msvc70_aux { Chris@16: Chris@16: template< bool > struct inherit_from Chris@16: { Chris@16: template< typename T > struct result Chris@16: { Chris@16: typedef T type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template<> struct inherit_from Chris@16: { Chris@16: template< typename T > struct result Chris@16: { Chris@16: struct type {}; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template< typename T > Chris@16: struct never_true Chris@16: { Chris@16: BOOST_STATIC_CONSTANT(bool, value = false); Chris@16: }; Chris@16: Chris@16: } // namespace msvc70_aux Chris@16: Chris@16: #endif // # if defined(BOOST_MSVC) && (BOOST_MSVC == 1300) Chris@16: Chris@16: template Chris@16: struct elif_selected Chris@16: { Chris@16: # if !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300 || defined(__MWERKS__) && __MWERKS__ <= 0x2407) Chris@16: template class then; Chris@16: # elif defined(BOOST_MSVC) && (BOOST_MSVC == 1300) Chris@16: template Chris@16: struct then : msvc70_aux::inherit_from< msvc70_aux::never_true::value > Chris@16: ::template result< if_selected >::type Chris@16: { Chris@16: }; Chris@16: # else Chris@16: template Chris@16: struct then : if_selected Chris@16: { Chris@16: }; Chris@16: # endif Chris@16: }; Chris@16: Chris@16: # if !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300 || defined(__MWERKS__) && __MWERKS__ <= 0x2407) Chris@16: template Chris@16: template Chris@16: class elif_selected::then : public if_selected Chris@16: { Chris@16: }; Chris@16: # endif Chris@16: Chris@16: template struct if_ Chris@16: { Chris@16: template Chris@16: struct then : if_selected Chris@16: { Chris@16: }; Chris@16: }; Chris@16: Chris@16: struct if_unselected Chris@16: { Chris@16: template struct elif : if_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct else_ Chris@16: { Chris@16: typedef U type; Chris@16: }; Chris@16: }; Chris@16: Chris@16: template <> Chris@16: struct if_ Chris@16: { Chris@16: template Chris@16: struct then : if_unselected Chris@16: { Chris@16: }; Chris@16: }; Chris@16: Chris@16: }}} // namespace boost::python::detail Chris@16: Chris@16: #endif // IF_ELSE_DWA2002322_HPP