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: 30.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 30.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 30.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 30.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 30.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.