diff options
Diffstat (limited to 'boost/hana/fwd/fuse.hpp')
-rw-r--r-- | boost/hana/fwd/fuse.hpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/boost/hana/fwd/fuse.hpp b/boost/hana/fwd/fuse.hpp new file mode 100644 index 0000000000..6e38227c61 --- /dev/null +++ b/boost/hana/fwd/fuse.hpp @@ -0,0 +1,55 @@ +/*! +@file +Forward declares `boost::hana::fuse`. + +@copyright Louis Dionne 2013-2016 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) + */ + +#ifndef BOOST_HANA_FWD_FUSE_HPP +#define BOOST_HANA_FWD_FUSE_HPP + +#include <boost/hana/config.hpp> + + +BOOST_HANA_NAMESPACE_BEGIN + //! Transform a function taking multiple arguments into a function that + //! can be called with a compile-time `Foldable`. + //! @ingroup group-Foldable + //! + //! + //! This function is provided for convenience as a different way of + //! calling `unpack`. Specifically, `fuse(f)` is a function such that + //! @code + //! fuse(f)(foldable) == unpack(foldable, f) + //! == f(x...) + //! @endcode + //! where `x...` are the elements in the foldable. This function is + //! useful when one wants to create a function that accepts a foldable + //! which is not known yet. + //! + //! @note + //! This function is not tag-dispatched; customize `unpack` instead. + //! + //! + //! Example + //! ------- + //! @include example/fuse.cpp +#ifdef BOOST_HANA_DOXYGEN_INVOKED + constexpr auto fuse = [](auto&& f) { + return [perfect-capture](auto&& xs) -> decltype(auto) { + return unpack(forwarded(xs), forwarded(f)); + }; + }; +#else + struct fuse_t { + template <typename F> + constexpr auto operator()(F&& f) const; + }; + + constexpr fuse_t fuse{}; +#endif +BOOST_HANA_NAMESPACE_END + +#endif // !BOOST_HANA_FWD_FUSE_HPP |