diff --git a/include/boost/intrusive/pointer_traits.hpp b/include/boost/intrusive/pointer_traits.hpp index 24843fd..731432b 100644 --- a/include/boost/intrusive/pointer_traits.hpp +++ b/include/boost/intrusive/pointer_traits.hpp @@ -223,7 +223,7 @@ struct pointer_traits template static pointer priv_static_cast_from(boost::intrusive::detail::false_, const UPtr &uptr) - { return pointer_to(*static_cast(to_raw_pointer(uptr))); } + { return uptr ? pointer_to(*static_cast(to_raw_pointer(uptr))) : pointer(); } //priv_const_cast_from template @@ -232,7 +232,7 @@ struct pointer_traits template static pointer priv_const_cast_from(boost::intrusive::detail::false_, const UPtr &uptr) - { return pointer_to(const_cast(*uptr)); } + { return uptr ? pointer_to(const_cast(*uptr)) : pointer(); } //priv_dynamic_cast_from template @@ -241,15 +241,7 @@ struct pointer_traits template static pointer priv_dynamic_cast_from(boost::intrusive::detail::false_, const UPtr &uptr) - { - element_type *p = dynamic_cast(&*uptr); - if(!p){ - return pointer(); - } - else{ - return pointer_to(*p); - } - } + { return uptr ? pointer_to(dynamic_cast(*uptr)) : pointer(); } ///@endcond };