Debug iterator support in libstdc++ improved
Refactors libstdc++'s debug iterators for cleaner constant evaluation compatibility.
This commit refactors the _Safe_iterator and _Safe_local_iterator implementations within libstdc++‘s debug mode. It simplifies the use of base class constructors and removes intermediate typedefs, directly using template parameters and base class types. This cleanup improves compatibility with constant evaluation and makes the code more maintainable.
In Details
The changes in safe_iterator.h and safe_local_iterator.h involve refactoring the internal structure of debug iterators. Specifically, base classes like _Iter_base and _Safe_base are removed, and constructors such as _Safe_iterator(const _Safe_iterator&, _Unchecked) are updated to directly call the appropriate base class constructors, delegating to the correct types and avoiding intermediate steps. This simplifies the iterator's inheritance hierarchy and facilitates constant evaluation.
- _GLIBCXX_DEBUG
- A macro that enables runtime safety checks in the C++ Standard Library. When defined, it wraps standard containers and iterators with checks for common programming errors like out-of-bounds access or iterator invalidation.
- Constant evaluation
- The process where a compiler evaluates expressions at compile time rather than at runtime. This is common for compile-time constants and can improve performance.
- Iterator
- An object in C++ that allows traversal through elements of a container (like a
std::vectororstd::list) or other sequence. Iterators abstract away the underlying container implementation.