dc96d371fa
This change excludes boost:: and boost::detail:: namespaces from ADL for unqualified function calls (e.g. algorithms). This reduces the possibility of name clashes with other libraries and user's code. One of the effects should be fixing test failures on gcc 4.2 and 4.4 due to clashed with Boost.TypeTraits. Also some of the functions marked with inline keyword.
44 lines
1.0 KiB
C++
44 lines
1.0 KiB
C++
#ifndef INDIRECT_REFERENCE_DWA200415_HPP
|
|
# define INDIRECT_REFERENCE_DWA200415_HPP
|
|
|
|
//
|
|
// Copyright David Abrahams 2004. Use, modification and distribution is
|
|
// subject to the Boost Software License, Version 1.0. (See accompanying
|
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
//
|
|
// typename indirect_reference<P>::type provides the type of *p.
|
|
//
|
|
// http://www.boost.org/libs/iterator/doc/pointee.html
|
|
//
|
|
|
|
# include <boost/detail/is_incrementable.hpp>
|
|
# include <boost/iterator/iterator_traits.hpp>
|
|
# include <boost/type_traits/remove_cv.hpp>
|
|
# include <boost/mpl/eval_if.hpp>
|
|
# include <boost/pointee.hpp>
|
|
|
|
namespace boost {
|
|
|
|
namespace detail
|
|
{
|
|
template <class P>
|
|
struct smart_ptr_reference
|
|
{
|
|
typedef typename boost::pointee<P>::type& type;
|
|
};
|
|
}
|
|
|
|
template <class P>
|
|
struct indirect_reference
|
|
: mpl::eval_if<
|
|
detail::is_incrementable<P>
|
|
, iterator_reference<P>
|
|
, detail::smart_ptr_reference<P>
|
|
>
|
|
{
|
|
};
|
|
|
|
} // namespace boost
|
|
|
|
#endif // INDIRECT_REFERENCE_DWA200415_HPP
|