blob: 1dbd07fbd8ea18795316ec9a435aa44cddcebbfc [file] [log] [blame]
template<class _CharT> struct char_traits;
template<typename _CharT, typename _Traits = char_traits<_CharT>>
class basic_string;
typedef basic_string<char> string;
template<typename> struct iterator_traits;
template<bool _Cond> struct conditional;
template<typename _Iter>
inline constexpr bool disable_sized_sentinel_for = false;
template<typename _Iter>
concept sized_sentinel_for = !disable_sized_sentinel_for<_Iter>;
template<typename _Iterator>
class __normal_iterator
{
typedef iterator_traits<_Iterator> __traits_type;
};
template<typename _Iterator>
class reverse_iterator
{
public:
using iterator_concept
= typename conditional<sized_sentinel_for<_Iterator>>::type;
};
template<typename _Iterator>
requires (!sized_sentinel_for<_Iterator>)
bool disable_sized_sentinel_for<reverse_iterator<_Iterator>> = true;
template<typename _Iterator>
bool operator==(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y);
template<typename _Iterator>
bool operator==(const __normal_iterator<_Iterator>& __lhs,
const __normal_iterator<_Iterator>& __rhs);
template<typename _It >
class common_iterator
{
public:
friend bool operator==(const common_iterator& __x,
const common_iterator& __y)
{
return __x._M_it == __y._M_it;
}
private:
_It _M_it;
};
template<typename _It>
struct iterator_traits<common_iterator<_It>>
{
};
template<typename _CharT>
struct char_traits
{
static bool eq(const _CharT& __c1, const _CharT& __c2)
{ return __c1 == __c2; }
};