diff options
author | François Dumont <fdumont@gcc.gnu.org> | 2019-10-06 15:10:40 +0000 |
---|---|---|
committer | François Dumont <fdumont@gcc.gnu.org> | 2019-10-06 15:10:40 +0000 |
commit | 6e556303102ebadb15bf8b7b16f6693d8ffde371 (patch) | |
tree | 2411ba180e2539b93d66c25b78b157f6a882921c | |
parent | 2c6374228bc0aef10b89e5dd9131dbf99477f753 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_iterator_base_types.h | 11 | ||||
-rw-r--r-- | libstdc++-v3/include/std/numeric | 3 |
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 |