namespace boost { namespace text { template<code_point_iter I, std::sentinel_for< I > S = I> struct grapheme_iterator; template<typename Iter1, typename Sentinel1, typename Iter2, typename Sentinel2, typename Enable = std::enable_if_t< std::is_same<Sentinel1, null_sentinel_t>::value != std::is_same<Sentinel2, null_sentinel_t>::value> > constexpr auto operator==(grapheme_iterator< Iter1, Sentinel1 > const & lhs, grapheme_iterator< Iter2, Sentinel2 > const & rhs); template<typename Iter1, typename Sentinel1, typename Iter2, typename Sentinel2, typename Enable = std::enable_if_t< std::is_same<Sentinel1, null_sentinel_t>::value != std::is_same<Sentinel2, null_sentinel_t>::value> > constexpr auto operator!=(grapheme_iterator< Iter1, Sentinel1 > const & lhs, grapheme_iterator< Iter2, Sentinel2 > const & rhs); template<typename CPIter, typename Sentinel> constexpr auto operator==(grapheme_iterator< CPIter, Sentinel > it, Sentinel s); template<typename CPIter, typename Sentinel> constexpr auto operator==(Sentinel s, grapheme_iterator< CPIter, Sentinel > it); template<typename CPIter, typename Sentinel> constexpr auto operator!=(grapheme_iterator< CPIter, Sentinel > it, Sentinel s); template<typename CPIter, typename Sentinel> constexpr auto operator!=(Sentinel s, grapheme_iterator< CPIter, Sentinel > it); } }