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
_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() {
}
};
- template <class _Tp>
+ template <class _Tp, bool = _Is_vector_bool_iterator<_Tp>::__value>
struct _Mutable_ForwardIteratorReferenceConcept
{
void __constraints() {
}
};
- // 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