[iterator] we specialize the iterator traits, thus we don't have to inherit std::iterator