/usr/include/boost/hof
NameSizeModeActions
detail/-0755rm
alias.hpp55520644editdlrm
always.hpp42610644editdlrm
apply.hpp83630644editdlrm
apply_eval.hpp44280644editdlrm
arg.hpp31480644editdlrm
capture.hpp54190644editdlrm
combine.hpp38770644editdlrm
compose.hpp50420644editdlrm
config.hpp61490644editdlrm
construct.hpp87740644editdlrm
decay.hpp17900644editdlrm
decorate.hpp63290644editdlrm
eval.hpp24000644editdlrm
first_of.hpp71000644editdlrm
fix.hpp63140644editdlrm
flip.hpp26900644editdlrm
flow.hpp50600644editdlrm
fold.hpp50000644editdlrm
function.hpp31290644editdlrm
function_param_limit.hpp16580644editdlrm
identity.hpp18840644editdlrm
if.hpp33140644editdlrm
implicit.hpp40410644editdlrm
indirect.hpp32680644editdlrm
infix.hpp60430644editdlrm
is_invocable.hpp17060644editdlrm
is_unpackable.hpp33410644editdlrm
lambda.hpp64580644editdlrm
lazy.hpp87290644editdlrm
lift.hpp37520644editdlrm
limit.hpp38170644editdlrm
match.hpp33310644editdlrm
mutable.hpp19880644editdlrm
pack.hpp127470644editdlrm
partial.hpp83070644editdlrm
pipable.hpp62270644editdlrm
placeholders.hpp137990644editdlrm
proj.hpp75170644editdlrm
protect.hpp21450644editdlrm
repeat.hpp41840644editdlrm
repeat_while.hpp51540644editdlrm
result.hpp36440644editdlrm
returns.hpp86070644editdlrm
reveal.hpp121870644editdlrm
reverse_fold.hpp52710644editdlrm
rotate.hpp25760644editdlrm
static.hpp23950644editdlrm
tap.hpp21180644editdlrm
unpack.hpp55880644editdlrm
unpack_sequence.hpp18100644editdlrm
version.hpp6790644editdlrm
Edit: /usr/include/boost/hof/capture.hpp (5419B)
/*============================================================================= Copyright (c) 2015 Paul Fultz II capture.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_CAPTURE_H #define BOOST_HOF_GUARD_CAPTURE_H #include #include #include #include #include #include #include /// capture /// ======= /// /// Description /// ----------- /// /// The `capture` function decorator is used to capture values in a function. /// It provides more flexibility in capturing than the lambda capture list in /// C++. It provides a way to do move and perfect capturing. The values /// captured are prepended to the argument list of the function that will be /// called. /// /// Synopsis /// -------- /// /// // Capture by decaying each value /// template /// constexpr auto capture(Ts&&... xs); /// /// // Capture lvalues by reference and rvalue reference by reference /// template /// constexpr auto capture_forward(Ts&&... xs); /// /// // Capture lvalues by reference and rvalues by value. /// template /// constexpr auto capture_basic(Ts&&... xs); /// /// Semantics /// --------- /// /// assert(capture(xs...)(f)(ys...) == f(xs..., ys...)); /// /// /// Example /// ------- /// /// #include /// #include /// /// struct sum_f /// { /// template /// T operator()(T x, U y) const /// { /// return x+y; /// } /// }; /// /// int main() { /// auto add_one = boost::hof::capture(1)(sum_f()); /// assert(add_one(2) == 3); /// } /// namespace boost { namespace hof { namespace detail { template struct capture_invoke : detail::compressed_pair, Pack>, detail::function_result_type { typedef capture_invoke fit_rewritable1_tag; typedef detail::compressed_pair, Pack> base; BOOST_HOF_INHERIT_CONSTRUCTOR(capture_invoke, base) template constexpr const detail::callable_base& base_function(Ts&&... xs) const noexcept { return this->first(xs...); } template constexpr const Pack& get_pack(Ts&&...xs) const noexcept { return this->second(xs...); } template struct unpack_capture_failure { template struct apply { typedef typename Failure::template of type; }; }; struct capture_failure { template struct apply { template struct of : Pack::template apply>::type {}; }; }; struct failure : failure_map> {}; BOOST_HOF_RETURNS_CLASS(capture_invoke); template constexpr BOOST_HOF_SFINAE_RESULT ( typename result_of, result_of...> >::type, id_&&> ) operator()(Ts&&... xs) const BOOST_HOF_SFINAE_RETURNS ( boost::hof::pack_join ( BOOST_HOF_MANGLE_CAST(const Pack&)(BOOST_HOF_CONST_THIS->get_pack(xs...)), boost::hof::pack_forward(BOOST_HOF_FORWARD(Ts)(xs)...) ) (BOOST_HOF_RETURNS_C_CAST(detail::callable_base&&)(BOOST_HOF_CONST_THIS->base_function(xs...))) ); }; template struct capture_pack : Pack { BOOST_HOF_INHERIT_CONSTRUCTOR(capture_pack, Pack); BOOST_HOF_RETURNS_CLASS(capture_pack); // TODO: Should use rvalue ref qualifier template constexpr auto operator()(F f) const BOOST_HOF_SFINAE_RETURNS ( capture_invoke(BOOST_HOF_RETURNS_STATIC_CAST(F&&)(f), BOOST_HOF_RETURNS_C_CAST(Pack&&)( BOOST_HOF_RETURNS_STATIC_CAST(const Pack&)(*boost::hof::always(BOOST_HOF_CONST_THIS)(f)) ) ) ); }; struct make_capture_pack_f { template constexpr capture_pack operator()(Pack p) const BOOST_HOF_NOEXCEPT_CONSTRUCTIBLE(capture_pack, Pack&&) { return capture_pack(static_cast(p)); } }; template struct capture_f { template constexpr auto operator()(Ts&&... xs) const BOOST_HOF_RETURNS ( BOOST_HOF_RETURNS_CONSTRUCT(make_capture_pack_f)()(BOOST_HOF_RETURNS_CONSTRUCT(F)()(BOOST_HOF_FORWARD(Ts)(xs)...)) ); }; } BOOST_HOF_DECLARE_STATIC_VAR(capture_basic, detail::capture_f); BOOST_HOF_DECLARE_STATIC_VAR(capture_forward, detail::capture_f); BOOST_HOF_DECLARE_STATIC_VAR(capture, detail::capture_f); }} // namespace boost::hof #endif