I wish to write some lambda functions to have this sort of behaviour. #include <lambda/lambda.hpp> #include <lambda/bind.hpp> #include <function.hpp> using namespace boost::lambda; using namespace boost; #include <iostream> using std::cout; using std::endl; #include <cmath> int main( int argc, char *argv[] ) { float value; var_type<float>::type theValue( var( value ) ); // Ignore this line #define cos(theta) bind( unlambda(bind( cos, _1 )), theta ) function<float ( float )> myfunction = ( cos( theValue ) - 1 ); value = 2; cout << "The result = " << myfunction(1) << endl; return 0; } Namely, the cos( value ) part. The code above works, but I feel that using a #define is a little messy, and seems hard to generalise to functions with more arguments. I was wondering if there was a general, better way of turning a given function into one whose execution is delayed. Thanks in advance, - Peter