aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrançois Dumont <fdumont@gcc.gnu.org>2019-10-06 15:10:40 +0000
committerFrançois Dumont <fdumont@gcc.gnu.org>2019-10-06 15:10:40 +0000
commit6e556303102ebadb15bf8b7b16f6693d8ffde371 (patch)
tree2411ba180e2539b93d66c25b78b157f6a882921c
parent2c6374228bc0aef10b89e5dd9131dbf99477f753 (diff)
downloadgcc-6e556303102ebadb15bf8b7b16f6693d8ffde371.zip
gcc-6e556303102ebadb15bf8b7b16f6693d8ffde371.tar.gz
gcc-6e556303102ebadb15bf8b7b16f6693d8ffde371.tar.bz2
Add C++11 __iterator_category_t template alias.
* include/bits/stl_iterator_base_types.h (__iterator_category_t): Define for C++11. (_RequireInputIte): Likewise and use __enable_if_t. * include/std/numeric (__is_random_access_iter): Use __iterator_category_t. From-SVN: r276637
-rw-r--r--libstdc++-v3/ChangeLog6
-rw-r--r--libstdc++-v3/include/bits/stl_iterator_base_types.h11
-rw-r--r--libstdc++-v3/include/std/numeric3
3 files changed, 14 insertions, 6 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 5cb2e29..40d9081a 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,11 @@
2019-10-06 François Dumont <fdumont@gcc.gnu.org>
+ * include/bits/stl_iterator_base_types.h (__iterator_category_t): Define
+ for C++11.
+ (_RequireInputIte): Likewise and use __enable_if_t.
+ * include/std/numeric
+ (__is_random_access_iter): Use __iterator_category_t.
+
* include/bits/stl_algo.h (copy_n): Add __glibcxx_requires_can_increment
debug checks.
* testsuite/25_algorithms/copy_n/debug/1_neg.cc: New.
diff --git a/libstdc++-v3/include/bits/stl_iterator_base_types.h b/libstdc++-v3/include/bits/stl_iterator_base_types.h
index af69dbb..951e704 100644
--- a/libstdc++-v3/include/bits/stl_iterator_base_types.h
+++ b/libstdc++-v3/include/bits/stl_iterator_base_types.h
@@ -208,11 +208,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
//@}
#if __cplusplus >= 201103L
+ template<typename _Iter>
+ using __iterator_category_t
+ = typename iterator_traits<_Iter>::iterator_category;
+
template<typename _InIter>
- using _RequireInputIter = typename
- enable_if<is_convertible<typename
- iterator_traits<_InIter>::iterator_category,
- input_iterator_tag>::value>::type;
+ using _RequireInputIter =
+ __enable_if_t<is_convertible<__iterator_category_t<_InIter>,
+ input_iterator_tag>::value>;
#endif
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/std/numeric b/libstdc++-v3/include/std/numeric
index 2392769..a164a9e 100644
--- a/libstdc++-v3/include/std/numeric
+++ b/libstdc++-v3/include/std/numeric
@@ -230,8 +230,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// @{
/// @cond undocumented
- template<typename _It, typename _Traits = iterator_traits<_It>,
- typename _Cat = typename _Traits::iterator_category>
+ template<typename _It, typename _Cat = __iterator_category_t<_It>>
using __is_random_access_iter
= is_base_of<random_access_iterator_tag, _Cat>;
/// @endcond