diff options
Diffstat (limited to 'libstdc++-v3/include/bits/boost_concept_check.h')
-rw-r--r-- | libstdc++-v3/include/bits/boost_concept_check.h | 58 |
1 files changed, 42 insertions, 16 deletions
diff --git a/libstdc++-v3/include/bits/boost_concept_check.h b/libstdc++-v3/include/bits/boost_concept_check.h index 71c99c1..8135251 100644 --- a/libstdc++-v3/include/bits/boost_concept_check.h +++ b/libstdc++-v3/include/bits/boost_concept_check.h @@ -47,11 +47,19 @@ namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION +_GLIBCXX_BEGIN_NAMESPACE_CONTAINER struct _Bit_iterator; struct _Bit_const_iterator; +_GLIBCXX_END_NAMESPACE_CONTAINER _GLIBCXX_END_NAMESPACE_VERSION } +namespace __gnu_debug +{ + template<typename _Iterator, typename _Sequence, typename _Category> + class _Safe_iterator; +} + namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -478,10 +486,32 @@ struct _Aux_require_same<_Tp,_Tp> { typedef _Tp _Type; }; _ValueT __val() const; }; -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wunused-variable" + template<typename _Tp> + struct _Is_vector_bool_iterator + { static const bool __value = false; }; - template <class _Tp> +#ifdef _GLIBCXX_DEBUG + namespace __cont = ::std::_GLIBCXX_STD_C; +#else + namespace __cont = ::std; +#endif + + // Trait to identify vector<bool>::iterator + template <> + struct _Is_vector_bool_iterator<__cont::_Bit_iterator> + { static const bool __value = true; }; + + // And for vector<bool>::const_iterator. + template <> + struct _Is_vector_bool_iterator<__cont::_Bit_const_iterator> + { static const bool __value = true; }; + + // And for __gnu_debug::vector<bool> iterators too. + template <typename _It, typename _Seq, typename _Tag> + struct _Is_vector_bool_iterator<__gnu_debug::_Safe_iterator<_It, _Seq, _Tag> > + : _Is_vector_bool_iterator<_It> { }; + + template <class _Tp, bool = _Is_vector_bool_iterator<_Tp>::__value> struct _ForwardIteratorReferenceConcept { void __constraints() { @@ -493,7 +523,7 @@ struct _Aux_require_same<_Tp,_Tp> { typedef _Tp _Type; }; } }; - template <class _Tp> + template <class _Tp, bool = _Is_vector_bool_iterator<_Tp>::__value> struct _Mutable_ForwardIteratorReferenceConcept { void __constraints() { @@ -503,26 +533,22 @@ struct _Aux_require_same<_Tp,_Tp> { typedef _Tp _Type; }; } }; - // vector<bool>::iterator is not a real forward reference, but pretend it is. - template <> - struct _ForwardIteratorReferenceConcept<std::_Bit_iterator> + // vector<bool> iterators are not real forward iterators, but we ignore that. + template <class _Tp> + struct _ForwardIteratorReferenceConcept<_Tp, true> { void __constraints() { } }; - // vector<bool>::iterator is not a real forward reference, but pretend it is. - template <> - struct _Mutable_ForwardIteratorReferenceConcept<std::_Bit_iterator> + // vector<bool> iterators are not real forward iterators, but we ignore that. + template <class _Tp> + struct _Mutable_ForwardIteratorReferenceConcept<_Tp, true> { void __constraints() { } }; - // And vector<bool>::const iterator too. - template <> - struct _ForwardIteratorReferenceConcept<std::_Bit_const_iterator> - { - void __constraints() { } - }; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-variable" template <class _Tp> struct _ForwardIteratorConcept |