static — Boost.HigherOrderFunctions 0.6 documentation

# static

## Header

    #include <boost/hof/static.hpp>

## Description

The `static_` adaptor is a static function adaptor that allows any default-constructible function object to be static-initialized. Functions initialized by `static_` cannot be used in `constexpr` functions. If the function needs to be statically initialized and called in a `constexpr` context, then a `constexpr` constructor needs to be used rather than `static_`.

## Synopsis

    template<class F>
    class static_;

## Requirements

F must be:

- ConstFunctionObject
- DefaultConstructible

## Example

    #include <boost/hof.hpp>
    #include <cassert>
    using namespace boost::hof;

    // In C++ this class can't be static-initialized, because of the non-
    // trivial default constructor.
    struct times_function
    {
        double factor;
        times_function() : factor(2)
        {}
        template<class T>
        T operator()(T x) const
        {
            return x*factor;
        }
    };

    static constexpr static_<times_function> times2 = {};

    int main() {
        assert(6 == times2(3));
    }