/usr/include/boost/hof/detail
Edit: /usr/include/boost/hof/detail/unpack_tuple.hpp (2652B)
/*=============================================================================
Copyright (c) 2016 Paul Fultz II
unpack_tuple.hpp
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_UNPACK_TUPLE_HPP
#define BOOST_HOF_GUARD_UNPACK_TUPLE_HPP
#include
#include
#include
#include
#include
#include
namespace boost { namespace hof {
namespace detail {
template
constexpr typename gens::value>::type
make_tuple_gens(const Sequence&)
{
return {};
}
#if (defined(__GNUC__) && !defined (__clang__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7)
template
struct tuple_element_return
: std::tuple_element
{};
template
struct tuple_element_return
: std::add_lvalue_reference::type>
{};
template
struct tuple_element_return
: std::add_rvalue_reference::type>
{};
template
struct tuple_element_return
: std::add_const::type>
{};
template< std::size_t I, class Tuple, class R = typename tuple_element_return::type >
R tuple_get( Tuple&& t )
{
return (R&&)(std::get(boost::hof::forward(t)));
}
#define BOOST_HOF_UNPACK_TUPLE_GET boost::hof::detail::tuple_get
#else
#define BOOST_HOF_UNPACK_TUPLE_GET std::get
#endif
template
constexpr auto unpack_tuple(F&& f, T&& t, seq) BOOST_HOF_RETURNS
(
f(
BOOST_HOF_AUTO_FORWARD(BOOST_HOF_UNPACK_TUPLE_GET(BOOST_HOF_AUTO_FORWARD(t)))...
)
);
struct unpack_tuple_apply
{
template
constexpr static auto apply(F&& f, S&& t) BOOST_HOF_RETURNS
(
boost::hof::detail::unpack_tuple(BOOST_HOF_FORWARD(F)(f), BOOST_HOF_FORWARD(S)(t), boost::hof::detail::make_tuple_gens(t))
);
};
}
template
struct unpack_sequence>
: detail::unpack_tuple_apply
{};
template
struct unpack_sequence>
: detail::unpack_tuple_apply
{};
template
struct unpack_sequence>
: detail::unpack_tuple_apply
{};
}} // namespace boost::hof
#endif