diff --git a/include/boost/pointee.hpp b/include/boost/pointee.hpp index b80aceb..89ea084 100644 --- a/include/boost/pointee.hpp +++ b/include/boost/pointee.hpp @@ -1,5 +1,5 @@ -#ifndef POINTEE_DWA200415_HPP -#define POINTEE_DWA200415_HPP +#ifndef BOOST_POINTEE_DWA200415_HPP +#define BOOST_POINTEE_DWA200415_HPP // // Copyright David Abrahams 2004. Use, modification and distribution is @@ -13,12 +13,11 @@ // http://www.boost.org/libs/iterator/doc/pointee.html // -#include -#include - #include #include +#include + namespace boost { namespace detail { @@ -28,16 +27,19 @@ struct smart_ptr_pointee using type = typename P::element_type; }; -template< typename Iterator, typename = typename std::remove_reference())>::type > +template< + typename Iterator, + typename = typename std::remove_reference< decltype(*std::declval< Iterator& >()) >::type +> struct iterator_pointee { - using type = typename std::iterator_traits::value_type; + using type = typename std::iterator_traits< Iterator >::value_type; }; template< typename Iterator, typename Reference > struct iterator_pointee< Iterator, const Reference > { - using type = typename std::add_const::value_type>::type; + using type = typename std::add_const< typename std::iterator_traits< Iterator >::value_type >::type; }; } // namespace detail @@ -45,13 +47,16 @@ struct iterator_pointee< Iterator, const Reference > template< typename P > struct pointee : public std::conditional< - detail::is_incrementable

::value, - detail::iterator_pointee

, - detail::smart_ptr_pointee

+ detail::is_incrementable< P >::value, + detail::iterator_pointee< P >, + detail::smart_ptr_pointee< P > >::type { }; +template< typename P > +using pointee_t = typename pointee< P >::type; + } // namespace boost -#endif // POINTEE_DWA200415_HPP +#endif // BOOST_POINTEE_DWA200415_HPP