[PATCH] D23217: [ADT] Change iterator_adaptor_base's default template arguments to forward more underlying typedefs

Tim Shen via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 5 11:22:46 PDT 2016


timshen created this revision.
timshen added a reviewer: chandlerc.
timshen added a subscriber: llvm-commits.

https://reviews.llvm.org/D23217

Files:
  include/llvm/ADT/iterator.h

Index: include/llvm/ADT/iterator.h
===================================================================
--- include/llvm/ADT/iterator.h
+++ include/llvm/ADT/iterator.h
@@ -155,7 +155,14 @@
     typename T = typename std::iterator_traits<WrappedIteratorT>::value_type,
     typename DifferenceTypeT =
         typename std::iterator_traits<WrappedIteratorT>::difference_type,
-    typename PointerT = T *, typename ReferenceT = T &,
+    typename PointerT = typename std::conditional<
+        std::is_same<T, typename std::iterator_traits<
+                            WrappedIteratorT>::value_type>::value,
+        typename std::iterator_traits<WrappedIteratorT>::pointer, T *>::type,
+    typename ReferenceT = typename std::conditional<
+        std::is_same<T, typename std::iterator_traits<
+                            WrappedIteratorT>::value_type>::value,
+        typename std::iterator_traits<WrappedIteratorT>::reference, T &>::type,
     // Don't provide these, they are mostly to act as aliases below.
     typename WrappedTraitsT = std::iterator_traits<WrappedIteratorT>>
 class iterator_adaptor_base


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23217.66983.patch
Type: text/x-patch
Size: 1115 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160805/0b350c6b/attachment.bin>


More information about the llvm-commits mailing list