Index: src/Common/utility.h
===================================================================
--- src/Common/utility.h	(revision b3c796366b707de21c95ee20102dd82d1d0d0c87)
+++ src/Common/utility.h	(revision 4639b0da8277c99a55369c3aceb02168ad3db5de)
@@ -376,12 +376,12 @@
 template< typename T, typename Func >
 struct lambda_iterate_t {
-	T & ref;
-	Func f;
+	const T & ref;
+	std::function<Func> f;
 
 	struct iterator {
 		typedef decltype(begin(ref)) Iter;
 		Iter it;
-		Func f;
-		iterator( Iter it, Func f ) : it(it), f(f) {}
+		std::function<Func> f;
+		iterator( Iter it, std::function<Func> f ) : it(it), f(f) {}
 		iterator & operator++() {
 			++it; return *this;
@@ -391,5 +391,5 @@
 	};
 
-	lambda_iterate_t( T & ref, Func f ) : ref(ref), f(f) {}
+	lambda_iterate_t( const T & ref, std::function<Func> f ) : ref(ref), f(f) {}
 
 	auto begin() const -> decltype(iterator(std::begin(ref), f)) { return iterator(std::begin(ref), f); }
@@ -398,6 +398,6 @@
 
 template< typename... Args >
-lambda_iterate_t<Args...> lazy_map( Args &&... args ) {
-	return lambda_iterate_t<Args...>(std::forward<Args>( args )...);
+lambda_iterate_t<Args...> lazy_map( const Args &... args ) {
+	return lambda_iterate_t<Args...>( args...);
 }
 
