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.

649. Several typos in regex_token_iterator constructors

Section: 28.6.11.2.2 [re.tokiter.cnstr] Status: NAD Editorial Submitter: Daniel Krügler Opened: 2007-03-03 Last modified: 2016-01-28

Priority: Not Prioritized

View all other issues in [re.tokiter.cnstr].

View all issues with NAD Editorial status.

Discussion:

In 28.6.11.2.2 [re.tokiter.cnstr]/1+2 both the constructor declaration and the following text shows some obvious typos:

1) The third constructor form is written as

template <std::size_t N>
  regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, 
                       const regex_type& re, 
                       const int (&submatches)[R], 
                       regex_constants::match_flag_type m = 
                         regex_constants::match_default);

where the dimensions of submatches are specified by an unknown value R, which should be N.

2) Paragraph 2 of the same section says in its last sentence:

The third constructor initializes the member subs to hold a copy of the sequence of integer values pointed to by the iterator range [&submatches, &submatches + R).

where again R must be replaced by N.

3) Paragraph 3 of the same section says in its first sentence:

Each constructor then sets N to 0, and position to position_iterator(a, b, re, f).

where a non-existing parameter "f" is mentioned, which must be replaced by the parameter "m".

Proposed resolution:

Change 28.6.11.2.2 [re.tokiter.cnstr]/1:

template <std::size_t N>
  regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, 
                       const regex_type& re, 
                       const int (&submatches)[R N], 
                       regex_constants::match_flag_type m = 
                         regex_constants::match_default);

Change 28.6.11.2.2 [re.tokiter.cnstr]/2:

Effects: The first constructor initializes the member subs to hold the single value submatch. The second constructor initializes the member subs to hold a copy of the argument submatches. The third constructor initializes the member subs to hold a copy of the sequence of integer values pointed to by the iterator range [&submatches, &submatches + R N).

Change 28.6.11.2.2 [re.tokiter.cnstr]/3:

Each constructor then sets N to 0, and position to position_iterator(a, b, re, f m). If position is not an end-of-sequence iterator the constructor sets result to the address of the current match. Otherwise if any of the values stored in subs is equal to -1 the constructor sets *this to a suffix iterator that points to the range [a, b), otherwise the constructor sets *this to an end-of-sequence iterator.