Это функция-член, которая была объявлена в list.h (GNU STL 2.9 list.h)
iterator begin() {
return (link_type)((*node).next); }
и link_type is
template <\class T> struct __list_node
Однако итератор равен
template<\class T, class Ref, class Ptr> struct __list_iterat
Часть list.h
следующие
template <class T, class Alloc = alloc>
class list {
protected:
typedef void* void_pointer;
typedef __list_node<T> list_node;
typedef simple_alloc<list_node, Alloc> list_node_allocator;
public:
typedef T value_type;
typedef value_type* pointer;
typedef value_type& r eference;
typedef const value_type& const_reference;
typedef list_node* l ink_type;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
public:
typedef __list_iterator<T, T&, T*> iterator;
typedef __list_iterator<T, const T&, const T*> const_iterator;
}
И часть __list_node
следующие
template<class T, class Ref, class Ptr>
struct __list_iterator {
typedef __list_iterator<T, T&, T*> iterator;
typedef __list_iterator<T, const T&, const T*> const_iterator;
typedef __list_iterator<T, Ref, Ptr> self;
typedef bidirectional_iterator_tag iterator_category;
typedef T value_type;
typedef Ptr pointer;
typedef Ref reference;
typedef __list_node<T>* link_type;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
link_type node;
}
Они вообще разного типа! ??, зачем?