Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.


Forward declares `boost::hana::transform`.

@copyright Louis Dionne 2013-2017
Distributed under the Boost Software License, Version 1.0.
(See accompanying file or copy at


#include <boost/hana/config.hpp>
#include <boost/hana/core/when.hpp>

namespace boost { namespace hana {
    //! Map a function over a `Functor`.
    //! @ingroup group-Functor
    //! Signature
    //! ---------
    //! Given `F` a Functor, the signature is
    //! \f$
    //!     \mathtt{transform} : F(T) \times (T \to U) \to F(U)
    //! \f$
    //! @param xs
    //! The structure to map `f` over.
    //! @param f
    //! A function called as `f(x)` on element(s) `x` of the structure,
    //! and returning a new value to replace `x` in the structure.
    //! Example
    //! -------
    //! @include example/transform.cpp
    constexpr auto transform = [](auto&& xs, auto&& f) {
        return tag-dispatched;
    template <typename Xs, typename = void>
    struct transform_impl : transform_impl<Xs, when<true>> { };

    struct transform_t {
        template <typename Xs, typename F>
        constexpr auto operator()(Xs&& xs, F&& f) const;

    BOOST_HANA_INLINE_VARIABLE constexpr transform_t transform{};
}} // end namespace boost::hana