]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/hana/include/boost/hana/detail/variadic/reverse_apply/unrolled.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / hana / include / boost / hana / detail / variadic / reverse_apply / unrolled.hpp
CommitLineData
7c673cae
FG
1/*!
2@file
3Defines `boost::hana::detail::variadic::reverse_apply_unrolled`.
4
5@copyright Louis Dionne 2013-2016
6Distributed under the Boost Software License, Version 1.0.
7(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
8 */
9
10#ifndef BOOST_HANA_DETAIL_VARIADIC_REVERSE_APPLY_UNROLLED_HPP
11#define BOOST_HANA_DETAIL_VARIADIC_REVERSE_APPLY_UNROLLED_HPP
12
13#include <boost/hana/config.hpp>
14#include <boost/hana/functional/reverse_partial.hpp>
15
16
17BOOST_HANA_NAMESPACE_BEGIN namespace detail { namespace variadic {
18 struct reverse_apply_unrolled_impl {
19 template <typename F>
20 constexpr decltype(auto) operator()(F&& f) const {
21 return static_cast<F&&>(f)();
22 }
23
24 template <typename F, typename X1>
25 constexpr decltype(auto) operator()(F&& f, X1&& x1) const {
26 return static_cast<F&&>(f)(
27 static_cast<X1&&>(x1)
28 );
29 }
30
31 template <typename F, typename X1, typename X2>
32 constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2) const {
33 return static_cast<F&&>(f)(
34 static_cast<X2&&>(x2),
35 static_cast<X1&&>(x1)
36 );
37 }
38
39 template <typename F, typename X1, typename X2, typename X3>
40 constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2, X3&& x3) const {
41 return static_cast<F&&>(f)(
42 static_cast<X3&&>(x3),
43 static_cast<X2&&>(x2),
44 static_cast<X1&&>(x1)
45 );
46 }
47
48 template <typename F, typename X1, typename X2, typename X3, typename X4>
49 constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4) const {
50 return static_cast<F&&>(f)(
51 static_cast<X4&&>(x4),
52 static_cast<X3&&>(x3),
53 static_cast<X2&&>(x2),
54 static_cast<X1&&>(x1)
55 );
56 }
57
58 template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5>
59 constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5) const {
60 return static_cast<F&&>(f)(
61 static_cast<X5&&>(x5),
62 static_cast<X4&&>(x4),
63 static_cast<X3&&>(x3),
64 static_cast<X2&&>(x2),
65 static_cast<X1&&>(x1)
66 );
67 }
68
69 template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename ...Xn>
70 constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, Xn&& ...xn) const {
71 return (*this)(hana::reverse_partial(
72 static_cast<F&&>(f)
73 , static_cast<X6&&>(x6)
74 , static_cast<X5&&>(x5)
75 , static_cast<X4&&>(x4)
76 , static_cast<X3&&>(x3)
77 , static_cast<X2&&>(x2)
78 , static_cast<X1&&>(x1)
79 ), static_cast<Xn&&>(xn)...);
80 }
81 };
82
83 constexpr reverse_apply_unrolled_impl reverse_apply_unrolled{};
84
85}} BOOST_HANA_NAMESPACE_END
86
87#endif // !BOOST_HANA_DETAIL_VARIADIC_REVERSE_APPLY_UNROLLED_HPP