I've been programming C++ for 20 years, and since C++11 the only feature I've seen that's worth the cognitive load is auto. Everything else just seems overly complicated. When I compare it to how easy things are in Python, I cry.
static_assert, nullptr, constexpr, initialization lists, for-each loops, default & delete for class methods...
and then there's things that are wonderful to use even if it's terrifying to look at how it's implemented like std::forward which is used with vector.emplace_back.
there's also simple things like vector<unique_ptr<X>> being legal C++11 syntax instead of an illegal right shift operator.
What is 'jobs' in your pseudo-code? Can it be a user-defined type? Does the author of that class need to explicitly state that their type meets some trait? Is 'Any' part of the type, a trait, or the language?
What humanrebar wrote is an algorithm that will work with any range of any type that has a 'failed()' member function.
Then, lambas are verbose.
I would like to have a simpler syntax like for simple lambas (no capture, single expression in the lamba body). job could be automatically typed with const auto&, or you could write it yourself if you wish.
job => return job.failed();
And a the current one, which is more verbose, for more complex lambas (capture, several expressions in the body)
This comment is nonresponsive to the parent comment. The complaint (which I happen to agree with) is that both iterators/ranges and lambda syntax are too verbose in C++.
Sorry, I misremembered the timeline. I thought they were part of C++03, but they're actually C++11. I was using shared_ptr when it was still part of Boost.