diff options
Diffstat (limited to 'boost/hana/fwd/then.hpp')
-rw-r--r-- | boost/hana/fwd/then.hpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/boost/hana/fwd/then.hpp b/boost/hana/fwd/then.hpp new file mode 100644 index 0000000000..83768e6ffb --- /dev/null +++ b/boost/hana/fwd/then.hpp @@ -0,0 +1,52 @@ +/*! +@file +Forward declares `boost::hana::then`. + +@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_THEN_HPP +#define BOOST_HANA_FWD_THEN_HPP + +#include <boost/hana/config.hpp> +#include <boost/hana/core/when.hpp> + + +BOOST_HANA_NAMESPACE_BEGIN + //! Sequentially compose two monadic actions, discarding any value + //! produced by the first but not its effects. + //! @ingroup group-Monad + //! + //! + //! @param before + //! The first `Monad` in the monadic composition chain. The result of + //! this monad is ignored, but its effects are combined with that of the + //! second monad. + //! + //! @param xs + //! The second `Monad` in the monadic composition chain. + //! + //! + //! Example + //! ------- + //! @include example/then.cpp +#ifdef BOOST_HANA_DOXYGEN_INVOKED + constexpr auto then = [](auto&& before, auto&& xs) -> decltype(auto) { + return tag-dispatched; + }; +#else + template <typename M, typename = void> + struct then_impl : then_impl<M, when<true>> { }; + + struct then_t { + template <typename Before, typename Xs> + constexpr decltype(auto) operator()(Before&& before, Xs&& xs) const; + }; + + constexpr then_t then{}; +#endif +BOOST_HANA_NAMESPACE_END + +#endif // !BOOST_HANA_FWD_THEN_HPP |