Implement LWG2952: iterator_traits should work for pointers to cv T

llvm-svn: 318119
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: ffcfd923d712ea9d3b78d763bfe6c5e5f3c19090
diff --git a/include/iterator b/include/iterator
index 9e1da93..78cab25 100644
--- a/include/iterator
+++ b/include/iterator
@@ -37,16 +37,6 @@
     typedef random_access_iterator_tag iterator_category;
 };
 
-template<class T>
-struct iterator_traits<const T*>
-{
-    typedef ptrdiff_t difference_type;
-    typedef T value_type;
-    typedef const T* pointer;
-    typedef const T& reference;
-    typedef random_access_iterator_tag iterator_category;
-};
-
 template<class Category, class T, class Distance = ptrdiff_t,
          class Pointer = T*, class Reference = T&>
 struct iterator
@@ -494,7 +484,7 @@
 struct _LIBCPP_TEMPLATE_VIS iterator_traits<_Tp*>
 {
     typedef ptrdiff_t difference_type;
-    typedef typename remove_const<_Tp>::type value_type;
+    typedef typename remove_cv<_Tp>::type value_type;
     typedef _Tp* pointer;
     typedef _Tp& reference;
     typedef random_access_iterator_tag iterator_category;