ぐはっ。HP版STLのLIST.Hを見てみました。
が、class list中でclass iteratorとclass const_iteratorを
それぞれについてベタで書いてありました・・・。
これだと1に書いた方法と似たり寄ったりになってしまって、
結局のところ解決にはならないです。

で以下のようにしてみたのですが今のところ問題ないようです。
(>>744の2を少しいじりました)

template<typename T,typename U> class aIteratorBase; // predeclaration
template<typename T,typename U> class bIteratorBase; // predeclaration

template<typename T,typename U>
aIteratorBase : public itetaror_traits<T> { bIteratorBase<T,U> b; 〜; };
template<typename T,typename U>
bIteratorBase : public itetaror_traits<T> { aIteratorBase<T,U> a; 〜; };

typedef aIteratorBase<list<a>::iterator,list<b>::iterator> aIterator;
typedef bIteratorBase<list<a>::iterator,list<b>::iterator> bIterator;
typedef aIteratorBase<list<a>::const_iterator,list<b>::const_iterator> aConstIterator;
typedef bIteratorBase<list<a>::const_iterator,list<b>::const_iterator> bConstIterator;