| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | /*!@fileForward declares `boost::hana::replicate`.@copyright Louis Dionne 2013-2017Distributed 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_REPLICATE_HPP#define BOOST_HANA_FWD_REPLICATE_HPP#include <boost/hana/config.hpp>#include <boost/hana/core/when.hpp>BOOST_HANA_NAMESPACE_BEGIN    //! Create a monadic structure by combining a lifted value with itself    //! `n` times.    //! @ingroup group-MonadPlus    //!    //! Given a value `x`, a non-negative `IntegralConstant` `n` and the tag    //! of a monadic structure `M`, `replicate` creates a new monadic structure    //! which is the result of combining `x` with itself `n` times inside the    //! monadic structure. In other words, `replicate` simply `lift`s `x` into    //! the monadic structure, and then combines that with itself `n` times:    //! @code    //!     replicate<M>(x, n) == cycle(lift<M>(x), n)    //! @endcode    //!    //! If `n` is zero, then the identity of the `concat` operation is returned.    //! In the case of sequences, this corresponds to creating a new sequence    //! holding `n` copies of `x`.    //!    //!    //! Signature    //! ---------    //! Given an `IntegralConstant` `C` and MonadPlus `M`, the signature is    //! @f$ \mathtt{replicate}_M : T \times C \to M(T) @f$.    //!    //! @tparam M    //! The tag of the returned monadic structure. It must be a    //! model of the MonadPlus concept.    //!    //! @param x    //! The value to lift into a monadic structure and then combine with    //! itself.    //!    //! @param n    //! A non-negative `IntegralConstant` representing the number of times to    //! combine `lift<M>(x)` with itself. If `n == 0`, `replicate` returns    //! `empty<M>()`.    //!    //!    //! Example    //! -------    //! @include example/replicate.cpp#ifdef BOOST_HANA_DOXYGEN_INVOKED    template <typename M>    constexpr auto replicate = [](auto&& x, auto const& n) {        return tag-dispatched;    };#else    template <typename M, typename = void>    struct replicate_impl : replicate_impl<M, when<true>> { };    template <typename M>    struct replicate_t {        template <typename X, typename N>        constexpr auto operator()(X&& x, N const& n) const;    };    template <typename M>    constexpr replicate_t<M> replicate{};#endifBOOST_HANA_NAMESPACE_END#endif // !BOOST_HANA_FWD_REPLICATE_HPP
 |