Комитет С++ планирует добавить в следующую версию стандарта С++ поддержку lambda-функций и замыканий. Примеры lambda-функций: for_each( w.begin(), w.end(), []( const Widget& w ) { cout << w << " "; } ); int minWeight = 100; find_if( w.begin(), w.end(), []( const Widget& w ) -> bool { w.Weight() > minWeight; } ); Замыкания там, конечно, безобразные. Если, например, захватить ссылки на локальные переменные, то, как несложно догадаться, the effect of invoking a closure object, or a copy, after the innermost block scope of the context of the lambda expression has been exited is undefined. Почему это назвали замыканием а не обычной вложенной функцией, мне не совсем понятно, может кто объяснит? В таком «замыкании» достаточно сохранить указатель на фрейм статически предыдущей функции. Это, кстати, то, что делает delegate в D 1.0, в D 2.0 замыкания куда честнее. Ссылка на блог Herb Sutter-а, С++ эксперта, члена комитета стандарта ISO С++, работающего архитектором программного обеспечения в Microsoft: http://herbsutter.spaces.live.com/ Ссылка на описание: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2550.pdf