Вы должны определить их как то, что вы хотите, чтобы они были. pointer
и reference
являются (такими же, как) типами возвращаемых операторов разыменования, которые вы будете определять для своего класса итератора (т. Е. operator->()
и operator*()
соответственно), поэтому вы хотите, чтобы эти операторы возвращали руководство, как вы хотите определить эти typedefs.
В комментарии вы предлагаете, что если бы вы унаследовали от std::iterator
, это было бы от std::iterator<std::bidirectional_iterator_tag,T>
. Вы можете посмотреть в Standard (как в ответе interjay) или в ваших заголовочных файлах, чтобы увидеть, какие typedefs это предоставит, что покажет вам, что вы хотите T
, T*
и T&
соответственно, чтобы так же, как то, что это дало бы.