Index: src/Common/utility.h
===================================================================
--- src/Common/utility.h	(revision bc3127d4673a19c1f70b8cc4cc5902edde3e61d8)
+++ src/Common/utility.h	(revision 108f3cdb1c308290d06b0f98d2f61dcf43a681bc)
@@ -370,4 +370,38 @@
 }
 
+// -----------------------------------------------------------------------------
+// Helper struct and function to support
+// for ( val : lazy_map( container1, f ) ) {}
+// syntax to have a for each that iterates a container, mapping each element by applying f
+template< typename T, typename Func >
+struct lambda_iterate_t {
+	T & ref;
+	Func f;
+
+	struct iterator {
+		typedef decltype(begin(ref)) Iter;
+		Iter it;
+		Func f;
+		iterator( Iter it, Func f ) : it(it), f(f) {}
+		iterator & operator++() {
+			++it; return *this;
+		}
+		bool operator!=( const iterator &other ) const { return it != other.it; }
+		auto operator*() const -> decltype(f(*it)) { return f(*it); }
+	};
+
+	lambda_iterate_t( T & ref, Func f ) : ref(ref), f(f) {}
+
+	auto begin() const -> decltype(iterator(std::begin(ref), f)) { return iterator(std::begin(ref), f); }
+	auto end() const   -> decltype(iterator(std::end(ref), f)) { return iterator(std::end(ref), f); }
+};
+
+template< typename... Args >
+lambda_iterate_t<Args...> lazy_map( Args &&... args ) {
+	return lambda_iterate_t<Args...>(std::forward<Args>( args )...);
+}
+
+
+
 // Local Variables: //
 // tab-width: 4 //
