This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of NAD Editorial status.

### 684. Unclear which members of match_results should be used in comparison

Section: 30.9 [re.results] Status: NAD Editorial Submitter: Nozomu Katoo Opened: 2007-05-27 Last modified: 2016-01-28

Priority: Not Prioritized

View all other issues in [re.results].

View all issues with NAD Editorial status.

Discussion:

In 30.3 [re.syn] of N2284, two template functions are declared here:

>     // 28.10, class template match_results:
>       <snip>
>     // match_results comparisons
>       template <class BidirectionalIterator, class Allocator>
>         bool operator== (const match_results<BidirectionalIterator, Allocator>& m1,
>                          const match_results<BidirectionalIterator, Allocator>& m2);
>       template <class BidirectionalIterator, class Allocator>
>         bool operator!= (const match_results<BidirectionalIterator, Allocator>& m1,
>                          const match_results<BidirectionalIterator, Allocator>& m2);

>     // 28.10.6, match_results swap:

But the details of these two bool operator functions (i.e., which members of `match_results` should be used in comparison) are not described in any following sections.

[ John adds: ]

> That looks like a bug: `operator==` should return `true` only if the two objects refer to the same match - ie if one object was constructed as a copy of the other.

[ Kona (2007): Bill and Pete to add minor wording to that proposed in N2409. ]

Proposed resolution:

Add a new section after 30.9.8 [re.results.swap], which reads:

28.10.7 match_results non-member functions.

>     template<class BidirectionalIterator, class Allocator>
>       bool operator==(const match_results<BidirectionalIterator, Allocator>& m1,
>                       const match_results<BidirectionalIterator, Allocator>& m2);

> > Returns: `true` only if the two objects refer to the same match.

>     template<class BidirectionalIterator, class Allocator>
>       bool operator!=(const match_results<BidirectionalIterator, Allocator>& m1,
>                       const match_results<BidirectionalIterator, Allocator>& m2);

> > Returns: `!(m1 == m2)`.

>     template<class BidirectionalIterator, class Allocator>
>       void swap(match_results<BidirectionalIterator, Allocator>& m1,
>                 match_results<BidirectionalIterator, Allocator>& m2);

> > Returns: `m1.swap(m2)`.

[ Bellevue: Proposed wording now in WP. ]