$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Ovanes Markarian (om_boost_at_[hidden])
Date: 2006-06-26 13:23:12
Hello all!
Sorry to disturb again... I have the following code:
namespace detail
{
        BOOST_MPL_HAS_XXX_TRAIT_DEF(element_type)
        BOOST_MPL_HAS_XXX_TRAIT_DEF(value_type)
        BOOST_MPL_HAS_XXX_TRAIT_DEF(type)
        BOOST_MPL_HAS_XXX_TRAIT_DEF(type_t)
}
struct B1
{};
int main()
{
typedef boost::shared_ptr<B1> ptr_t;
typedef
                        mpl::if_c
                        <
                                detail::has_type<ptr_t>::value
                                , mpl::int_<0>
                                ,  mpl::if_c
                                        <
                                                detail::has_element_type<ptr_t>::value
                                                , mpl::int_<1>
                                                ,  mpl::if_c
                                                        <
                                                                detail::has_value_type<ptr_t>::value
                                                                , mpl::int_<2>
                                                                ,  mpl::if_c
                                                                        <
                                                                                detail::has_type_t<ptr_t>::value
                                                                                , mpl::int_<3>
                                                                                , mpl::int_<-1>
									>
							>
					>
			>
                type_id;
                type_id					just_for_debug_an_instance;
}
MSVC 8.0 debugger shows for just_for_debug_an_instance the following
type:		boost::mpl::if_c<1,boost::mpl::int_<0>,boost::mpl::if_c<1,boost::mpl::int_<1>,boost::mpl::if_c<1,boost::mpl::int_<2>,boost::mpl::if_c<0,boost::mpl::int_<3>,boost::mpl::int_<-1>
> > > >
How is it possible, if I really can find in the shared_ptr template class the following typedefs:
public:
    typedef T element_type;
    typedef T value_type;
    typedef T * pointer;
    typedef typename detail::shared_ptr_traits<T>::reference reference;
For me it is really unclear why does:
detail::has_type<ptr_t>::value has the value 1 in the first static if statement?
I looked through the shared_ptr template class and found nowhere the 'type' typedef, function, or
anything else, what could be evaluated by has_value. Any help would be really apreciated.
Many Thanks,
Ovanes Markarian