Notably the following ctors remain non-explicit because they are used as implicit conversions in too many places: * __debug_less(_Compare&) * __map_iterator(_TreeIterator) * __map_const_iterator(_TreeIterator) * __hash_map_iterator(_HashIterator) * __hash_map_const_iterator(_HashIterator)
This has been on my to-do list for a while, just for general code cleanliness. This was not done with any mechanical assistance (e.g. a compiler warning for non-explicit ctors); it was just me knowing about certain ctors for a long time (e.g. __bit_reference), and then brainstorming or randomly happening across some others.
Oddly, only Clang (not GCC or MSVC) thinks that this change has beneficial effects on overload resolution. I'm not sure who's correct here, but, C++ being C++, I would guess that GCC and MSVC are correct and Clang is wrong. https://godbolt.org/z/K76sr5MG9
Just curious, but is there a good reason to make a default constructor explicit?