C++0x (upcoming C++ standard, includes lambda functions)
en.wikipedia.org
en.wikipedia.org
The compiler already deals with this issue with the ?: operator. It's a readability and maintenance problem there, too. It'd be easy to do; the language designers chose not to.
You can "explicitly" pass all variables in the containing scope with [=] or [&], so it's more of an optional annotation than a requirement.
Most languages have a spectrum of skill, and it generally is possible to progress upwards in skill for any given language as long as you have mastered the basics. C++ is different. Because C++ is very much: "here's some tools to write your own C-like language, go nuts!" Idiomatic C++ is so widely variant it rightly justifies as being different languages. The extreme end of the spectrum of C++ usage (and I speak not of niche usage but day-in-day-out being-used-at-huge-companies usage) is as different from "ordinary" idiomatic C++ as Python or Ruby might be.
P.S. I've working with C++ for more than 10 years.
leaving it up to the programmer is a waste of time.