|
Boost Users : |
From: Ovanes Markarian (om_boost_at_[hidden])
Date: 2008-02-21 06:04:45
Hello *!
As already asked many times in the list about the broken HAS_XXX (
BOOST_MPL_HAS_XXX_TRAIT_DEF<http://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
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net