By supplying the missing overloads, implementers can use additional information to provide more effient implementations for range operations, or stronger exception-safety semantics. This paper does make either of these a requirement though.
insert member function should have overloads that accept single values and ranges of values marked by an iterator pair. If concept-based overloading is adopted, it would be further recommended to overload on a single range/view value as well.
All sequence containers with a push_back member function should have overloads that accept single values and ranges of values marked by an iterator pair. If concept-based overloading is adopted, it would be further recommended to overload on a single range/view value as well.
All sequence containers with a push_front member function should have overloads that accept single values and ranges of values marked by an iterator pair. If concept-based overloading is adopted, it would be further recommended to overload on a single range/view value as well.
All sequence-adapters with a push member function should have overloads that accept single values and ranges of values marked by an iterator pair. If concept-based overloading is adopted, it would be further recommended to overload on a single range/view value as well. These overloads will call the appropiately function in the adapted type i.e. stack would call the appropariate push_back overload while queue would call push_front
All sequence-adapters have a constructor template that accepts ranges of values marked by an iterator pair. If concept-based overloading is adopted, it would be further recommended to overload on a single range/view value as well.
It is noted that the associative containers already have the appropriate interface.
insert function to accept a number of values marked by a count, and a value to copy. To maintain a consistent interface, these might be overloaded as well.
deque template:template <InputIterator> void push_back( InputIterator first, InputIterator last )void push_back( size_type n, const T & value )template <InputIterator> void push_front( InputIterator first, InputIterator last )void push_front( size_type n, const T & value )
Add the following overloads to the list template:
template <InputIterator> void push_back( InputIterator first, InputIterator last )void push_back( size_type n, const T & value )template <InputIterator> void push_front( InputIterator first, InputIterator last )void push_front( size_type n, const T & value )
Add the following overloads to the vector template:
template <InputIterator> void push_back( InputIterator first, InputIterator last )void push_back( size_type n, const T & value )
Add the following overloads to the priority_queue template:
template <InputIterator> void push( InputIterator first, InputIterator last )void push( size_type n, const T & value )
Add the following overloads to the queue template:
template <InputIterator> queue( InputIterator first, InputIterator last )template <InputIterator> void push( InputIterator first, InputIterator last )void push( size_type n, const T & value )
Add the following overloads to the stack template:
template <InputIterator> stack( InputIterator first, InputIterator last )template <InputIterator> void push( InputIterator first, InputIterator last )void push( size_type n, const T & value )