1109. std::includes should require CopyConstructible predicate

Section: 28.7.6.1 [includes] Status: NAD Concepts Submitter: Alisdair Meredith Opened: 2009-04-28 Last modified: 2016-02-10

Priority: Not Prioritized

View all other issues in [includes].

View all issues with NAD Concepts status.

Discussion:

All the set operation algorithms require a CopyConstructible predicate, with the exception of std::includes. This looks like a typo as much as anything, given the general library requirement that predicates are copy constructible, and wording style of other set-like operations.

[ Batavia (2009-05): ]

We agree with the proposed resolution. Move to NAD Editorial.

Proposed resolution:

Change [algorithms.syn] and 28.7.6.1 [includes]:

template<InputIterator Iter1, InputIterator Iter2,
         typename CopyConstructible Compare>
  requires Predicate<Compare, Iter1::value_type, Iter2::value_type>
        && Predicate<Compare, Iter2::value_type, Iter1::value_type>
  bool includes(Iter1 first1, Iter1 last1,
                Iter2 first2, Iter2 last2,
                Compare comp);