This uses C++11 features to simplify the definition of the __normal_iterator constructor that allows converting from iterator to const_iterator. The previous definition relied on _Container::pointer which is present in std::vector and std::basic_string, but is not actually part of the container requirements. Removing the use of _Container::pointer and defining it in terms of is_convertible allows __normal_iterator to be used with new container types which do not define a pointer member. Specifically, this will allow it to be used in std::basic_stacktrace. In theory this will enable some conversions which were not previously permitted, for example __normal_iterator> can now be converted to __normal_iterator>. In practice this doesn't matter because the library never uses such types. In any case, allowing those conversions is consistent with the corresponding constructors of std::reverse_iterator and std::move_iterator. Signed-off-by: Jonathan Wakely libstdc++-v3/ChangeLog: * include/bits/stl_iterator.h (__normal_iterator): Simplify converting constructor and do not require _Container::pointer. Tested powerpc64le-linux. Committed to trunk.