681. Operator functions impossible to compare are defined in [re.submatch.op]

Section: 31.9.2 [re.submatch.op] Status: CD1 Submitter: Nozomu Katoo Opened: 2007-05-27 Last modified: 2016-02-10

Priority: Not Prioritized

View all other issues in [re.submatch.op].

View all issues with CD1 status.

Discussion:

In 31.9.2 [re.submatch.op] of N2284, operator functions numbered 31-42 seem impossible to compare. E.g.:

template <class BiIter>
   bool operator==(typename iterator_traits<BiIter>::value_type const& lhs,
                    const sub_match<BiIter>& rhs);

-31- Returns: lhs == rhs.str().

When char* is used as BiIter, iterator_traits<BiIter>::value_type would be char, so that lhs == rhs.str() ends up comparing a char value and an object of std::basic_string<char>. However, the behaviour of comparison between these two types is not defined in 24.3.3 [string.nonmembers] of N2284. This applies when wchar_t* is used as BiIter.

Proposed resolution:

Adopt the proposed resolution in N2409.

[ Kona (2007): The LWG adopted the proposed resolution of N2409 for this issue. The LWG voted to accelerate this issue to Ready status to be voted into the WP at Kona. ]