still problems with has_xxx and shared_ptr...

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

Hi! I do not expect a really quick input on this issue, but it would be nice to if anyone could confirm, that this should be checked on boost test systems. Thanks, Ovanes -----Original Message----- From: Ovanes Markarian [mailto:om_boost@keywallet.com] Sent: Monday, June 26, 2006 19:23 To: boost-users@lists.boost.org Subject: [Boost-users] still problems with has_xxx and shared_ptr... 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
participants (1)
-
Ovanes Markarian