The definition of pointer_iterator omits what should be a iterator_traits::<>::iterator_category parameter from iterator_adaptor_base. As a result, iterators based on pointer_iterator always have defaulted value types and the wrong iterator category.
The definition of pointee_iterator just a few lines above does this correctly.
This resolves bug 39617.