Proposed resolution:
This wording is relative to N3691.
Change [re.submatch.op] as indicated:
template <class BiIter, class ST, class SA> bool operator==( const basic_string< typename iterator_traits<BiIter>::value_type, ST, SA>& lhs, const sub_match<BiIter>& rhs);-7- Returns: rhs.compare(
lhs.c_str()typename sub_match<BiIter>::string_type(lhs.data(), lhs.size())) == 0.
[…]
template <class BiIter, class ST, class SA> bool operator<( const basic_string< typename iterator_traits<BiIter>::value_type, ST, SA>& lhs, const sub_match<BiIter>& rhs);-9- Returns: rhs.compare(
lhs.c_str()typename sub_match<BiIter>::string_type(lhs.data(), lhs.size())) > 0.
[…]
template <class BiIter, class ST, class SA> bool operator==(const sub_match<BiIter>& lhs, const basic_string< typename iterator_traits<BiIter>::value_type, ST, SA>& rhs);-13- Returns: lhs.compare(
rhs.c_str()typename sub_match<BiIter>::string_type(rhs.data(), rhs.size())) == 0.
[…]
template <class BiIter, class ST, class SA> bool operator<(const sub_match<BiIter>& lhs, const basic_string< typename iterator_traits<BiIter>::value_type, ST, SA>& rhs);-15- Returns: lhs.compare(
rhs.c_str()typename sub_match<BiIter>::string_type(rhs.data(), rhs.size())) < 0.