Proposed resolution:
This wording is relative to N4971.
[Drafting Note: The proposed wording is similar to the specification in [vector.overview] p2 and suggests to simply strike [string.iterators] because it doesn't say anything new compared to [container.reqmts] and [container.rev.reqmts].
Alternatively, one could add a
Complexity: Constant.
paragraph to each function in [string.iterators], but that would be less clearer and would not explicitly say basic_string meets the reversible container requirements. ]
Modify [basic.string.general] as indicated:
-2- A specialization of basic_string is a contiguous container ([container.reqmts]) and a reversible container ([container.rev.reqmts]).
-3- In all cases, [data(), data() + size()] is a valid range, data() + size() points at an object with value charT() (a "null terminator"), and size() <= capacity() is true.
[…]namespace std { template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>> class basic_string { […] //[string.iterators],iterators constexpr iterator begin() noexcept; constexpr const_iterator begin() const noexcept; constexpr iterator end() noexcept; constexpr const_iterator end() const noexcept; constexpr reverse_iterator rbegin() noexcept; constexpr const_reverse_iterator rbegin() const noexcept; constexpr reverse_iterator rend() noexcept; constexpr const_reverse_iterator rend() const noexcept; constexpr const_iterator cbegin() const noexcept; constexpr const_iterator cend() const noexcept; constexpr const_reverse_iterator crbegin() const noexcept; constexpr const_reverse_iterator crend() const noexcept; // [string.capacity], capacity […] }; […] }
Remove subclause [string.iterators] in its entirety:
23.4.3.4 Iterator support [string.iterators]constexpr iterator begin() noexcept; constexpr const_iterator begin() const noexcept; constexpr const_iterator cbegin() const noexcept;[…]
-1- Returns: An iterator referring to the first character in the string.constexpr reverse_iterator rend() noexcept; constexpr const_reverse_iterator rend() const noexcept; constexpr const_reverse_iterator crend() const noexcept;
-4- Returns: An iterator which is semantically equivalent to reverse_iterator(begin()).