inline bool operator == (range<char*> const &value, range<char*> const &other) { return range<char const*>(value.begin(), value.end()) == range<char const*>(other.begin(), other.end()); }
inline bool operator > (range<char const*> const &value, range<char*> const &other) { return value > range<char const*>(other.begin(), other.end()); }
inline bool operator > (range<char*> const &value, range<char const*> const &other) { return range<char const*>(value.begin(), value.end()) > other; }
template <typename Iter, typename Other> inline bool operator > (range<Iter> const &value, range<Other> const &other) { std::greater<typename std::iterator_traits<Iter>::value_type> pred; return (!value.empty() && !other.empty()) ? std::lexicographical_compare(value.begin(), value.end(), other.begin(), other.end(), pred) : !value.empty(); }
template <typename Iter, typename Other> inline bool operator < (range<Iter> const &value, range<Other> const &other) { return (!value.empty() && !other.empty()) ? std::lexicographical_compare(value.begin(), value.end(), other.begin(), other.end()) : !other.empty(); }
inline end_t end (const range <begin_t, end_t>& range) { return range.end (); }
bool operator==(tbb::concurrent_priority_queue<element_type> const& lhs, range const & rhs ){ using equality_comparison_helpers::to_vector; return to_vector()(lhs) == std::vector<element_type>(rhs.begin(),rhs.end()); }
friend It end(const range<It>& range) { return range.end(); }