Hello *! As already asked many times in the list about the broken HAS_XXX ( BOOST_MPL_HAS_XXX_TRAIT_DEFhttp://www.boost.org/libs/mpl/doc/refmanual/has-xxx-trait-def.html) mpl I would like to ask following: If I use this code (on MSVC 7.1 compiler) and I have a type like: struct test { int xxx; }; and use the macro namespace x { BOOST_MPL_HAS_XXX_TRAIT_DEF(xxx); } This will result in the following code fragment: -------------------------------------------------------------------------------------------- /// included code from has_xxx.hpp namespace boost { namespace mpl { namespace aux { template< typename T > struct msvc71_sfinae_helper { typedef void type; }; } } } namespace sn { template< typename T, typename U = void > struct has_xxx_impl_ { static const bool value = false; typedef boost::mpl::bool_<value> type; }; template< typename T > struct has_xxx_impl_< T , typename boost::mpl::aux::msvc71_sfinae_helper< typename T::xxx >::type > { static const bool value = true; typedef boost::mpl::bool_<value> type; }; template< typename T, typename fallback_ = boost::mpl::bool_<false> > struct has_xxx : has_xxx_impl_<T> { }; } -------------------------------------------------------------------------------------------------- For me this will clearly fail, since T::xxx is not a type but an integer member of the struct. If xxx would be a member function it would not be a type as well, so has_xxx can only determine if there is some nested class type or a typedef within the inspected type. Is this correct? Many thanks, Ovanes