https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86015
--- Comment #16 from Jonathan Wakely <redi at gcc dot gnu.org> --- The standard relaxed the rules slightly for iterator difference types, to permit integer-class types to be used as difference types (see [iterator.concept.winc]). However, those integer-class types are implementation-defined (so not arbitrary program-defined types) and they must support implicit conversion from all integer types. So _Distance __d = 0; is required to work. So I'm not seeing a bug here, and even if we decide to accept program-defined integer-like class types as iterator difference types, it seems to me that they should follow the same rules as integer-class types, and support implicit conversion from real integers. So I'm inclined to close this, as I don't see any reason to change libstdc++.