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

1192. basic_string missing definitions for cbegin / cend / crbegin / crend

Section: [string.iterators] Status: C++11 Submitter: Jonathan Wakely Opened: 2009-08-14 Last modified: 2017-02-03

Priority: Not Prioritized

View all issues with C++11 status.


Unlike the containers in clause 23, basic_string has definitions for begin() and end(), but these have not been updated to include cbegin, cend, crbegin and crend.

[ 2009-10-28 Howard: ]

Moved to Tentatively NAD after 5 positive votes on c++std-lib. Added rationale.

[ 2009-10-28 Alisdair disagrees: ]

I'm going to have to speak up as the dissenting voice.

I agree the issue could be handled editorially, and that would be my preference if Pete feels this is appropriate. Failing that, I really think this issue should be accepted and moved to ready. The other begin/end functions all have a semantic definition for this template, and it is confusing if a small few are missing.

I agree that an alternative would be to strike all the definitions for begin/end/rbegin/rend and defer completely to the requirements tables in clause 23. I think that might be confusing without a forward reference though, as those tables are defined in a later clause than the basic_string template itself. If someone wants to pursue this I would support it, but recommend it as a separate issue.

So my preference is strongly to move Ready over NAD, and a stronger preference for NAD Editorial if Pete is happy to make these changes.

[ 2009-10-29 Howard: ]

Moved to Tentatively Ready after 5 positive votes on c++std-lib. Removed rationale to mark it NAD. :-)

Proposed resolution:

Add to [string.iterators]

iterator       begin();
const_iterator begin() const;
const_iterator cbegin() const;


iterator       end();
const_iterator end() const;
const_iterator cend() const;


reverse_iterator       rbegin();
const_reverse_iterator rbegin() const;
const_reverse_iterator crbegin() const;


reverse_iterator       rend();
const_reverse_iterator rend() const;
const_reverse_iterator crend() const;