summaryrefslogtreecommitdiff log msg author committer range
path: root/boost/hof/tap.hpp
blob: ab265c29aec04a9403b7d413ccf5fd68c529d591 (plain)
 ```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 ``` ``````/*============================================================================= Copyright (c) 2014 Paul Fultz II tap.h Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #ifndef BOOST_HOF_GUARD_FUNCTION_TAP_H #define BOOST_HOF_GUARD_FUNCTION_TAP_H /// tap /// === /// /// Description /// ----------- /// /// The `tap` function invokes a function on the first argument passed in and /// then returns the first argument. This is useful in a chain of pipable /// function to perform operations on intermediate results. As a result, this /// function is [`pipable`](/include/boost/hof/pipable). /// /// Synopsis /// -------- /// /// template /// pipable constexpr T tap(T&& x, const F& f); /// /// Requirements /// ------------ /// /// F must be: /// /// * [UnaryInvocable](UnaryInvocable) /// /// Example /// ------- /// /// #include /// #include /// #include /// using namespace boost::hof; /// /// struct sum_f /// { /// template /// T operator()(T x, U y) const /// { /// return x+y; /// } /// }; /// /// const pipable_adaptor sum = {}; /// int main() { /// // Prints 3 /// int r = 1 | sum(2) | tap([](int i) { std::cout << i; }) | sum(2); /// assert(r == 5); /// } /// #include #include #include namespace boost { namespace hof { namespace detail { struct tap_f { template constexpr T operator()(T&& x, const F& f) const BOOST_HOF_RETURNS_DEDUCE_NOEXCEPT((boost::hof::apply(f, x), BOOST_HOF_FORWARD(T)(x))) { return boost::hof::apply(f, x), BOOST_HOF_FORWARD(T)(x); } }; } BOOST_HOF_DECLARE_STATIC_VAR(tap, pipable_adaptor); }} // namespace boost::hof #endif ``````