关于STL中list的有关问题

关于STL中list的问题
iterator begin() { return (link_type)((*node).next); },这句话返回值类型时一个iterator,有这个定义typedef __list_iterator<T, T&, T*>             iterator;,其中 __list_iterator是一个类模板,返回值是一个指针,但是返回值类型确实模板的实例?这到底怎么回事。

这是 __list_iterator模板:
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;  
  
  __list_iterator(link_type x) : node(x) {}  
  __list_iterator() {}  
  __list_iterator(const iterator& x) : node(x.node) {}  
  

  bool operator==(const self& x) const { return node == x.node; }  
  bool operator!=(const self& x) const { return node != x.node; }  
  

  reference operator*() const { return (*node).data; }  
  
#ifndef __SGI_STL_NO_ARROW_OPERATOR  
  pointer operator->() const { return &(operator*()); }  
#endif /* __SGI_STL_NO_ARROW_OPERATOR */  
  

  self& operator++()  
  {  
    node = (link_type)((*node).next);  
    return *this;  
  }  
  

  self operator++(int)  
  {  
    self tmp = *this;  
    ++*this;  
    return tmp;  
  }  
  
  self& operator--()  
  {  
    node = (link_type)((*node).prev);  
    return *this;  
  }  
  
  self operator--(int)  
  {  
    self tmp = *this;  
    --*this;  
    return tmp;  
  }  
}; 

------解决方案--------------------
引用:
谢谢你的回答,但是我的意思是,返回值和返回值类型不符,一个是迭代器类模板实例,一个是节点类指针。这是为什么?

强制转换。
------解决方案--------------------
node 是当前结点迭代器,*node 给出该结点,本身是个 list_node 类型,包含一个 next 指针,指向一下个结点,作者知道该结点一定是 link_type,所以把 void* 指针强制转换为 link_type,然后用这个构造函数 __list_iterator(link_type x) 转换为 list::iterator 类型,即 begin 的返回类型。