
I understand what you're saying, but I don't agree that it's that for solely for legacy reasons. In practice, the only reason why you might iterator over all sub-matches is to print them out. Otherwise, the sub-matches are accessed randomly, because (for example) the 1st sub-match is a date and the 3rd sub-match is an email address, and I'm not interested in the 2nd. See?
... interface provide that task easily. Similarly, we may run into a situation where people commonly do non-random iterations through your "what" list.
It is hard to think of when you will need to: normally you are using a regex because the data in different parts of the string has different meaning. When the fields are regular you'll normally use regex_token_iterator<> instead, and that is STL-friendly.
It looks like the current setup is not STL-friendly. Most of the "what" list is one type of thing, the in-order pieces of the regex parse.
Skipping over the first element is not that hard for the unusual cases where regex_token_iterator<> is not what you needed. Darren