2300. [CD] Redundant sections for map and multimap members should be removed

Section: 23.4.3 [map], 23.4.4 [multimap] Status: C++14 Submitter: Daniel Krügler Opened: 2013-09-25 Last modified: 2017-06-15

Priority: Not Prioritized

View all other issues in [map].

View all issues with C++14 status.

Discussion:

Addresses ES 17

Sections are redundant with general associative container requirements at 23.2.7 [associative.reqmts], Table 102.

Suggested action:

Delete sections.

[2013-09-25 Daniel provides resolution suggestion]

[2013-09-25 Chicago]

Daniel's wording is good, move to Immediate to resolve NB comment.

[2013-09-29 Chicago]

Accept for Working Paper

Proposed resolution:

This wording is relative to N3691.

  1. Change the header <map> synopsis, 23.4.3.1 [map.overview] p2 as indicated:

    // 23.4.4.5, map operations:
    iterator find(const key_type& x);
    const_iterator find(const key_type& x) const;
    template <class K> iterator find(const K& x);
    template <class K> const_iterator find(const K& x) const;
    
  2. Delete the complete sub-clause [map.ops]:

    23.4.4.5 map operations [map.ops]

    iterator find(const key_type& x);
    const_iterator find(const key_type& x) const;
    iterator lower_bound(const key_type& x);
    const_iterator lower_bound(const key_type& x) const;
    iterator upper_bound(const key_type& x);
    const_iterator upper_bound(const key_type &x) const;
    pair<iterator, iterator>
      equal_range(const key_type &x);
    pair<const_iterator, const_iterator>
      equal_range(const key_type& x) const;
    

    -1- The find, lower_bound, upper_bound and equal_range member functions each have two versions, one const and the other non-const. In each case the behavior of the two functions is identical except that the const version returns a const_iterator and the non-const version an iterator (23.2.4).

  3. Delete the complete sub-clause [multimap.ops]:

    23.4.5.4 multimap operations [multimap.ops]

    iterator find(const key_type &x);
    const_iterator find(const key_type& x) const;
    
    iterator lower_bound(const key_type& x);
    const_iterator lower_bound(const key_type& x) const;
    
    pair<iterator, iterator>
      equal_range(const key_type &x);
    pair<const_iterator, const_iterator>
      equal_range(const key_type& x) const;
    

    -1- The find, lower_bound, upper_bound and equal_range member functions each have two versions, one const and one non-const. In each case the behavior of the two versions is identical except that the const version returns a const_iterator and the non-const version an iterator (23.2.4).