std::list<T,Allocator>::merge

The function does nothing if other refers to the same object as *this.

# Declarations

void merge( list& other );
void merge( list&& other );

(since C++11)

template< class Compare >
void merge( list& other, Compare comp );
template< class Compare >
void merge( list&& other, Compare comp );

(since C++11)

# Parameters

# Return value

(none)

# Example

#include <iostream>
#include <list>
 
std::ostream& operator<<(std::ostream& ostr, const std::list<int>& list)
{
    for (const int i : list)
        ostr << ' ' << i;
    return ostr;
}
 
int main()
{
    std::list<int> list1 = {5, 9, 1, 3, 3};
    std::list<int> list2 = {8, 7, 2, 3, 4, 4};
 
    list1.sort();
    list2.sort();
    std::cout << "list1: " << list1 << '\n';
    std::cout << "list2: " << list2 << '\n';
 
    list1.merge(list2);
    std::cout << "merged:" << list1 << '\n';
}

# Defect reports

DRApplied toBehavior as publishedCorrect behavior
LWG 300C++98the effect when *this and other referto the same object was not specifiedspecified as no-op
LWG 1207C++98it was unclear whether iterators and/or references will be invalidatedkeep valid
LWG 1215C++98O(1) node moving could not be guaranteed ifget_allocator() != other.get_allocator()the behavior isundefined in this case
LWG 3088C++98operator< could misbehave for pointer elementsimplementation-definedstrict total order used

# See also