has_xxx: Adjust MSVC 7.1/8.0 workaround (ticket #1317)

[SVN r49260]
This commit is contained in:
Aleksey Gurtovoy
2008-10-10 21:59:29 +00:00
parent 8e75b0f4ae
commit afbaa1252e

View File

@@ -157,11 +157,13 @@ template<> struct trait<T> \
// applied to partial specialization to fix some apparently random failures // applied to partial specialization to fix some apparently random failures
// (thanks to Daniel Wallin for researching this!) // (thanks to Daniel Wallin for researching this!)
namespace boost { namespace mpl { namespace aux {
template< typename T > struct msvc71_sfinae_helper { typedef void type; };
}}}
# define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \ # define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \
template< typename T > \
struct BOOST_PP_CAT(trait, _msvc_sfinae_helper) \
{ \
typedef void type; \
};\
\
template< typename T, typename U = void > \ template< typename T, typename U = void > \
struct BOOST_PP_CAT(trait,_impl_) \ struct BOOST_PP_CAT(trait,_impl_) \
{ \ { \
@@ -172,7 +174,7 @@ struct BOOST_PP_CAT(trait,_impl_) \
template< typename T > \ template< typename T > \
struct BOOST_PP_CAT(trait,_impl_)< \ struct BOOST_PP_CAT(trait,_impl_)< \
T \ T \
, typename boost::mpl::aux::msvc71_sfinae_helper< typename T::name >::type \ , typename BOOST_PP_CAT(trait, _msvc_sfinae_helper)< typename T::name >::type \
> \ > \
{ \ { \
BOOST_STATIC_CONSTANT(bool, value = true); \ BOOST_STATIC_CONSTANT(bool, value = true); \