// Copyright (C) 2009-2012 Lorenzo Caminiti // Distributed under the Boost Software License, Version 1.0 // (see accompanying file LICENSE_1_0.txt or a copy at // http://www.boost.org/LICENSE_1_0.txt) // Home at http://www.boost.org/libs/local_function #include #define BOOST_TEST_MODULE TestN2550FindIf #include #include #include struct employee { int salary; explicit employee(const int& a_salary): salary(a_salary) {} }; BOOST_AUTO_TEST_CASE(test_n2550_find_if) { std::vector employees; employees.push_back(employee(85000)); employees.push_back(employee(100000)); employees.push_back(employee(120000)); int min_salary = 100000; int u_limit = min_salary + 1; bool BOOST_LOCAL_FUNCTION(const bind& min_salary, const bind& u_limit, const employee& e) { return e.salary >= min_salary && e.salary < u_limit; } BOOST_LOCAL_FUNCTION_NAME(between) // Pass local function to an STL algorithm as a template paramter (this // cannot be done with plain member functions of local classes). std::vector::iterator i = std::find_if( employees.begin(), employees.end(), between); BOOST_CHECK(i != employees.end()); BOOST_CHECK(i->salary >= min_salary && i->salary < u_limit); }