Home

Awesome

Boost.Hof <a target="_blank" href="https://travis-ci.org/boostorg/hof">Travis status</a> <a target="_blank" href="https://ci.appveyor.com/project/pfultz2/hof">Appveyor status</a>

About

HigherOrderFunctions is a header-only C++11/C++14 library that provides utilities for functions and function objects, which can solve many problems with much simpler constructs than whats traditionally been done with metaprogramming.

HigherOrderFunctions is:

HigherOrderFunctions is divided into three components:

Github: https://github.com/boostorg/hof/

Documentation: http://boost-hof.readthedocs.io/

Motivation

Requirements

This requires a C++11 compiler. There are no third-party dependencies. This has been tested on clang 3.5-3.8, gcc 4.6-7, and Visual Studio 2015 and 2017.

Contexpr support

Both MSVC and gcc 4.6 have limited constexpr support due to many bugs in the implementation of constexpr. However, constexpr initialization of functions is supported when using the BOOST_HOF_STATIC_FUNCTION and BOOST_HOF_STATIC_LAMBDA_FUNCTION constructs.

Noexcept support

On older compilers such as gcc 4.6 and gcc 4.7, noexcept is not used due to many bugs in the implementation. Also, most compilers don't support deducing noexcept with member function pointers. Only newer versions of gcc(4.9 and later) support this.

Building

Boost.HigherOrderFunctions library uses cmake to build. To configure with cmake create a build directory, and run cmake:

mkdir build
cd build
cmake ..

Installing

To install the library just run the install target:

cmake --build . --target install

Tests

The tests can be built and run by using the check target:

cmake --build . --target check

The tests can also be ran using Boost.Build, just copy library to the boost source tree, and then:

cd test
b2

Documentation

The documentation is built using Sphinx. First, install the requirements needed for the documentation using pip:

pip install -r doc/requirements.txt

Then html documentation can be generated using sphinx-build:

sphinx-build -b html doc/ doc/html/

The final docs will be in the doc/html folder.

<!-- Links -->