#include #include "test.hpp" BOOST_HOF_TEST_CASE() { BOOST_HOF_TEST_CHECK(3 == boost::hof::indirect(std::unique_ptr(new binary_class()))(1, 2)); BOOST_HOF_TEST_CHECK(3 == boost::hof::reveal(boost::hof::indirect(std::unique_ptr(new binary_class())))(1, 2)); binary_class f; BOOST_HOF_TEST_CHECK(3 == boost::hof::indirect(&f)(1, 2)); BOOST_HOF_TEST_CHECK(3 == boost::hof::reveal(boost::hof::indirect(&f))(1, 2)); } #if BOOST_HOF_HAS_NOEXCEPT_DEDUCTION BOOST_HOF_TEST_CASE() { binary_class f; static_assert(noexcept(boost::hof::indirect(&f)(1, 2)), "noexcept indirect"); } #endif struct mutable_function { mutable_function() : value(0) {} void operator()(int a) { value += a; } int value; }; BOOST_HOF_TEST_CASE() { auto mf = mutable_function{}; boost::hof::indirect(&mf)(15); boost::hof::indirect(&mf)(2); BOOST_HOF_TEST_CHECK(mf.value == 17); } BOOST_HOF_TEST_CASE() { auto mf = std::make_shared(); boost::hof::indirect(mf)(15); boost::hof::indirect(mf)(2); BOOST_HOF_TEST_CHECK(mf->value == 17); }