/*============================================================================= Copyright (c) 2011-2019 Bolero MURAKAMI https://github.com/bolero-MURAKAMI/Sprout 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 SPROUT_TUPLE_FUSED_HPP #define SPROUT_TUPLE_FUSED_HPP #include #include #include #include namespace sprout { namespace tuples { // // fused // template class fused { public: typedef F functor_type; public: template struct result : public sprout::tuples::apply_result {}; private: functor_type f_; public: SPROUT_CONSTEXPR fused() SPROUT_DEFAULTED_DEFAULT_CONSTRUCTOR_DECL fused(fused const&) = default; explicit SPROUT_CONSTEXPR fused(F f) : f_(f) {} SPROUT_CONSTEXPR functor_type functor() const { return f_; } template SPROUT_CONSTEXPR typename result::type operator()(Tuple&& t) const { return sprout::tuples::apply(f_, SPROUT_FORWARD(Tuple, t)); } }; // // make_fused // template inline SPROUT_CONSTEXPR sprout::tuples::fused make_fused(F const& f) { return sprout::tuples::fused(f); } } // namespace tuples using sprout::tuples::fused; using sprout::tuples::make_fused; } // namespace sprout #endif // #ifndef SPROUT_TUPLE_FUSED_HPP