1cdef extern from "<list>" namespace "std" nogil:
2    cdef cppclass list[T,ALLOCATOR=*]:
3        ctypedef T value_type
4        ctypedef ALLOCATOR allocator_type
5
6        # these should really be allocator_type.size_type and
7        # allocator_type.difference_type to be true to the C++ definition
8        # but cython doesn't support deferred access on template arguments
9        ctypedef size_t size_type
10        ctypedef ptrdiff_t difference_type
11
12        cppclass iterator:
13            iterator()
14            iterator(iterator &)
15            T& operator*()
16            iterator operator++()
17            iterator operator--()
18            bint operator==(iterator)
19            bint operator!=(iterator)
20        cppclass reverse_iterator:
21            reverse_iterator()
22            reverse_iterator(iterator &)
23            T& operator*()
24            reverse_iterator operator++()
25            reverse_iterator operator--()
26            bint operator==(reverse_iterator)
27            bint operator!=(reverse_iterator)
28        cppclass const_iterator(iterator):
29            pass
30        cppclass const_reverse_iterator(reverse_iterator):
31            pass
32        list() except +
33        list(list&) except +
34        list(size_t, T&) except +
35        #list operator=(list&)
36        bint operator==(list&, list&)
37        bint operator!=(list&, list&)
38        bint operator<(list&, list&)
39        bint operator>(list&, list&)
40        bint operator<=(list&, list&)
41        bint operator>=(list&, list&)
42        void assign(size_t, T&)
43        T& back()
44        iterator begin()
45        const_iterator const_begin "begin"()
46        void clear()
47        bint empty()
48        iterator end()
49        const_iterator const_end "end"()
50        iterator erase(iterator)
51        iterator erase(iterator, iterator)
52        T& front()
53        iterator insert(iterator, T&)
54        void insert(iterator, size_t, T&)
55        size_t max_size()
56        void merge(list&)
57        #void merge(list&, BinPred)
58        void pop_back()
59        void pop_front()
60        void push_back(T&)
61        void push_front(T&)
62        reverse_iterator rbegin()
63        const_reverse_iterator const_rbegin "rbegin"()
64        void remove(T&)
65        #void remove_if(UnPred)
66        reverse_iterator rend()
67        const_reverse_iterator const_rend "rend"()
68        void resize(size_t, T&)
69        void reverse()
70        size_t size()
71        void sort()
72        #void sort(BinPred)
73        void splice(iterator, list&)
74        void splice(iterator, list&, iterator)
75        void splice(iterator, list&, iterator, iterator)
76        void swap(list&)
77        void unique()
78        #void unique(BinPred)
79