My gripe with C++ is that it provides all these abstractions for cleaner code (iterators + advance() for ex.), but then will send you off with a big FU when dealing with edge cases/checking?! Calling advance(itr, n), where n takes itr beyond .end() is Undefined Behaviour. WHY?!
I mean, yes, I can guess it maybe has something to do with "Zero-Cost-Abstractions" and moving the burden/cost of error checking to the programmer when necessary, but for some of these, it doesn& #39;t seem to even make sense without those checks?