transform_iteratorは実装の詳細?

昨日、今日と湯布院まで小旅行に行っていたので、作業はあまり進んでいません。
書きかけだったfirst_iteratorの関連型だけ整理しました。
http://hamigaki.sourceforge.jp/doc/html/first_iterator.html
operator->()がoperator_arrow_proxy<X>を返す場合も、pointerはX*です。
iterator_categoryは、実装に用いているtransform_iteratorの仕様で決定するわけですが、それを実装の詳細と考えるべきなのかが悩みどころです。
もちろん、first_iteratorはtransform_iteratorを使わなくても実装できるので、「first_iteratorはtransform_iteratorから派生していなければならない」というわけではありませんが、「iterator_categoryはtransform_iteratorを参照せよ」とするのはありかなぁ、と。
あるいは、

template <class Iterator>
class first_iterator : public boost::transform_iterator<UnaryFunction, Iterator> // Exposition only

とでもしておくべきですかねぇ。