[ADT] Generalize pointee_iterator to smart pointers by using decltype.

Based on review feedback from Dave on the original patch.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207146 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chandler Carruth
2014-04-24 21:10:35 +00:00
parent fda5e19b96
commit 01f21349f2
2 changed files with 45 additions and 4 deletions

View File

@@ -163,10 +163,9 @@ public:
/// \code
/// typedef pointee_iterator<SmallVectorImpl<T *>::iterator> iterator;
/// \endcode
template <
typename WrappedIteratorT,
typename T = typename std::remove_pointer<
typename std::iterator_traits<WrappedIteratorT>::value_type>::type>
template <typename WrappedIteratorT,
typename T = typename std::remove_reference<
decltype(**std::declval<WrappedIteratorT>())>::type>
struct pointee_iterator
: iterator_adaptor_base<pointee_iterator<WrappedIteratorT>,
WrappedIteratorT, T> {