Index: D:/boost/svn/branches/bcbboost/boost/boost/mpl/aux_/config/overload_resolution.hpp =================================================================== --- D:/boost/svn/branches/bcbboost/boost/boost/mpl/aux_/config/overload_resolution.hpp (.../https://svn.boost.org/svn/boost/trunk/boost/mpl) (revisione 39531) +++ D:/boost/svn/branches/bcbboost/boost/boost/mpl/aux_/config/overload_resolution.hpp (.../D:/boost/svn/branches/bcbboost/boost/boost/mpl) (copia locale) @@ -18,7 +18,7 @@ #if !defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION) \ && !defined(BOOST_MPL_PREPROCESSING_MODE) \ - && ( BOOST_WORKAROUND(__BORLANDC__, < 0x600) \ + && ( BOOST_WORKAROUND(__BORLANDC__, < 0x590) \ || BOOST_WORKAROUND(__MWERKS__, < 0x3001) \ ) Index: D:/boost/svn/branches/bcbboost/boost/boost/mpl/aux_/config/ttp.hpp =================================================================== --- D:/boost/svn/branches/bcbboost/boost/boost/mpl/aux_/config/ttp.hpp (.../https://svn.boost.org/svn/boost/trunk/boost/mpl) (revisione 39531) +++ D:/boost/svn/branches/bcbboost/boost/boost/mpl/aux_/config/ttp.hpp (.../D:/boost/svn/branches/bcbboost/boost/boost/mpl) (copia locale) @@ -19,7 +19,9 @@ #include #if !defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \ - && defined(BOOST_NO_TEMPLATE_TEMPLATES) + && ( defined(BOOST_NO_TEMPLATE_TEMPLATES) \ + || BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x590) ) \ + ) # define BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS Index: D:/boost/svn/branches/bcbboost/boost/boost/mpl/aux_/config/ctps.hpp =================================================================== --- D:/boost/svn/branches/bcbboost/boost/boost/mpl/aux_/config/ctps.hpp (.../https://svn.boost.org/svn/boost/trunk/boost/mpl) (revisione 39531) +++ D:/boost/svn/branches/bcbboost/boost/boost/mpl/aux_/config/ctps.hpp (.../D:/boost/svn/branches/bcbboost/boost/boost/mpl) (copia locale) @@ -19,7 +19,7 @@ #if !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC) \ && !defined(BOOST_MPL_PREPROCESSING_MODE) \ - && BOOST_WORKAROUND(__BORLANDC__, < 0x600) + && BOOST_WORKAROUND(__BORLANDC__, < 0x582) # define BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC Index: D:/boost/svn/branches/bcbboost/boost/boost/mpl/has_xxx.hpp =================================================================== --- D:/boost/svn/branches/bcbboost/boost/boost/mpl/has_xxx.hpp (.../https://svn.boost.org/svn/boost/trunk/boost/mpl) (revisione 39531) +++ D:/boost/svn/branches/bcbboost/boost/boost/mpl/has_xxx.hpp (.../D:/boost/svn/branches/bcbboost/boost/boost/mpl) (copia locale) @@ -26,6 +26,10 @@ #include +#if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x590) ) +# include +#endif + #if !defined(BOOST_MPL_CFG_NO_HAS_XXX) # if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) @@ -182,6 +186,41 @@ }; \ /**/ +# elif BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x590) ) + +# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_BCB_DEF(trait, trait_tester, name, default_) \ +template< typename T, bool IS_CLASS > \ +struct trait_tester \ +{ \ + BOOST_STATIC_CONSTANT( bool, value = false ); \ +}; \ +template< typename T > \ +struct trait_tester< T, true > \ +{ \ + struct trait_tester_impl \ + { \ + template < class U > \ + static int resolve( boost::mpl::aux::type_wrapper const volatile * \ + , boost::mpl::aux::type_wrapper* = 0 ); \ + static char resolve( ... ); \ + }; \ + typedef boost::mpl::aux::type_wrapper t_; \ + BOOST_STATIC_CONSTANT( bool, value = ( sizeof( trait_tester_impl::resolve( static_cast< t_ * >(0) ) ) == sizeof(int) ) ); \ +}; \ +template< typename T, typename fallback_ = boost::mpl::bool_ > \ +struct trait \ +{ \ + BOOST_STATIC_CONSTANT( bool, value = (trait_tester< T, boost::is_class< T >::value >::value) ); \ + typedef boost::mpl::bool_< trait< T, fallback_ >::value > type; \ +}; + +# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \ + BOOST_MPL_HAS_XXX_TRAIT_NAMED_BCB_DEF( trait \ + , BOOST_PP_CAT(trait,_tester) \ + , name \ + , default_ ) \ +/**/ + # else // other SFINAE-capable compilers # define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \