]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/spirit/home/x3/support/utility/lambda_visitor.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / spirit / home / x3 / support / utility / lambda_visitor.hpp
1 /*=============================================================================
2 Copyright (c) 2014 Joel de Guzman
3
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
7 #if !defined(BOOST_SPIRIT_X3_LAMBDA_VISITOR_MAY_19_2014_1116AM)
8 #define BOOST_SPIRIT_X3_LAMBDA_VISITOR_MAY_19_2014_1116AM
9
10 namespace boost { namespace spirit { namespace x3
11 {
12 template <typename RT, typename... Lambdas>
13 struct lambda_visitor;
14
15 template <typename RT, typename F, typename... Lambdas>
16 struct lambda_visitor<RT, F, Lambdas...> : F, lambda_visitor<RT, Lambdas...>
17 {
18 typedef lambda_visitor<RT , Lambdas...> base_type;
19 using F::operator();
20 using base_type::operator();
21 lambda_visitor(F f, Lambdas... lambdas)
22 : F(f), base_type(lambdas...)
23 {}
24 };
25
26 template <typename RT, typename F>
27 struct lambda_visitor<RT, F> : F
28 {
29 typedef RT result_type;
30 using F::operator();
31 lambda_visitor(F f)
32 : F(f)
33 {}
34 };
35
36 template <typename RT>
37 struct lambda_visitor<RT>
38 {
39 typedef RT result_type;
40 };
41
42 template <typename RT, typename... Lambdas>
43 lambda_visitor<RT, Lambdas...> make_lambda_visitor(Lambdas... lambdas)
44 {
45 return { lambdas... };
46 }
47 }}}
48
49 #endif