I have stumbled upon somehow stupid problem, yet I have not found any answear or even question about it. I am implementing custom transforming input iterator, and want to do something like that:
template<class T>
class my_it : 
public std::iterator<std::input_iterator_tag, T, ??? should I put anything here ??? > {
    ...
    my_proxy_with_implemented_arrow<T> operator->();
    T operator*();
    ...
};
As the type name says - proxy has implemented operator-> to get pointer behaviour.
And so my question is, should I define pointer template argument in inherited std::iterator to my_proxy_with_implemented_arrow<T> and reference to T or should I keep the default values and don't care about return values?
In other words - do the types given in inherited std::iterator should be the same as the types returned by the iterator operators?
