BOOST_HOF_LIFT — Boost.HigherOrderFunctions 0.6 documentation

# BOOST_HOF_LIFT

## Header

    #include <boost/hof/lift.hpp>

## Description

The macros `BOOST_HOF_LIFT` and `BOOST_HOF_LIFT_CLASS` provide a lift operator that will wrap a template function in a function object so it can be passed to higher-order functions. The `BOOST_HOF_LIFT` macro will wrap the function using a generic lambda. As such, it will not preserve `constexpr`. The `BOOST_HOF_LIFT_CLASS` can be used to declare a class that will wrap function. This will preserve `constexpr` and it can be used on older compilers that don’t support generic lambdas yet.

## Limitation

In C++14, `BOOST_HOF_LIFT` doesn’t support `constexpr` due to using a generic lambda. Instead, `BOOST_HOF_LIFT_CLASS` can be used. In C++17, there is no such limitation.

## Synopsis

    // Wrap the function in a generic lambda
    #define BOOST_HOF_LIFT(...)

    // Declare a class named `name` that will forward to the function
    #define BOOST_HOF_LIFT_CLASS(name, ...)

## Example

    #include <boost/hof.hpp>
    #include <cassert>
    #include <algorithm>

    // Declare the class `max_f`
    BOOST_HOF_LIFT_CLASS(max_f, std::max);

    int main() {
        auto my_max = BOOST_HOF_LIFT(std::max);
        assert(my_max(3, 4) == std::max(3, 4));
        assert(max_f()(3, 4) == std::max(3, 4));
    }