Added indirect_reference_t alias.

This commit is contained in:
Andrey Semashev 2025-02-07 01:30:16 +03:00
parent 8998179e9d
commit e446c6e05c

View File

@ -1,5 +1,5 @@
#ifndef INDIRECT_REFERENCE_DWA200415_HPP #ifndef BOOST_INDIRECT_REFERENCE_DWA200415_HPP
#define INDIRECT_REFERENCE_DWA200415_HPP #define BOOST_INDIRECT_REFERENCE_DWA200415_HPP
// //
// Copyright David Abrahams 2004. Use, modification and distribution is // Copyright David Abrahams 2004. Use, modification and distribution is
@ -11,19 +11,19 @@
// http://www.boost.org/libs/iterator/doc/pointee.html // http://www.boost.org/libs/iterator/doc/pointee.html
// //
#include <type_traits>
#include <boost/detail/is_incrementable.hpp> #include <boost/detail/is_incrementable.hpp>
#include <boost/iterator/iterator_traits.hpp> #include <boost/iterator/iterator_traits.hpp>
#include <boost/pointee.hpp> #include <boost/pointee.hpp>
#include <type_traits>
namespace boost { namespace boost {
namespace detail { namespace detail {
template< typename P > template< typename P >
struct smart_ptr_reference struct smart_ptr_reference
{ {
using type = typename boost::pointee<P>::type&; using type = boost::pointee_t< P >&;
}; };
} // namespace detail } // namespace detail
@ -31,13 +31,16 @@ struct smart_ptr_reference
template< typename P > template< typename P >
struct indirect_reference : struct indirect_reference :
std::conditional< std::conditional<
detail::is_incrementable<P>::value, detail::is_incrementable< P >::value,
iterator_reference<P>, iterator_reference< P >,
detail::smart_ptr_reference<P> detail::smart_ptr_reference< P >
>::type >::type
{ {
}; };
template< typename P >
using indirect_reference_t = typename indirect_reference< P >::type;
} // namespace boost } // namespace boost
#endif // INDIRECT_REFERENCE_DWA200415_HPP #endif // BOOST_INDIRECT_REFERENCE_DWA200415_HPP