1 
2 // Copyright (C) 2009-2012 Lorenzo Caminiti
3 // Distributed under the Boost Software License, Version 1.0
4 // (see accompanying file LICENSE_1_0.txt or a copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
6 // Home at http://www.boost.org/libs/local_function
7 
8 #include <boost/local_function.hpp>
9 #include <boost/function.hpp>
10 #include <boost/typeof/typeof.hpp>
11 #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
12 #include <boost/detail/lightweight_test.hpp>
13 
14 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::function, 1)
15 
derivative(boost::function<int (int)> & f,int dx)16 boost::function<int (int)> derivative(boost::function<int (int)>& f, int dx) {
17     int BOOST_LOCAL_FUNCTION( (bind& f) (const bind dx) (int x) ) {
18         return (f(x + dx) - f(x)) / dx;
19     } BOOST_LOCAL_FUNCTION_NAME(deriv)
20 
21     return deriv;
22 }
23 
main(void)24 int main(void) {
25     int BOOST_LOCAL_FUNCTION( (int x) ) {
26         return x + 4;
27     } BOOST_LOCAL_FUNCTION_NAME(add2)
28 
29     boost::function<int (int)> a2 = add2;
30     boost::function<int (int)> d2 = derivative(a2, 2);
31     BOOST_TEST(d2(6) == 1);
32     return boost::report_errors();
33 }
34 
35