It depends on the kind of iterator. According to the C++ standard:Operator * on iterator of type T will result in reference to type T (T&), right (i.e. not type T itself or some other types)?
Input iterators: result is convertible to T
Output iterators: result is not used
Forward, bi-directional and random access iterators: result is T&