From the MPL standpoint, all iterators are opaque types. Incrementing, dereferencing and the rest of iterator functionality is accessed through the associated iterator metafunctions.