1 /*=============================================================================
2 Copyright (c) 2014 Joel de Guzman
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
10 namespace boost { namespace spirit { namespace x3
12 template <typename RT, typename... Lambdas>
13 struct lambda_visitor;
15 template <typename RT, typename F, typename... Lambdas>
16 struct lambda_visitor<RT, F, Lambdas...> : F, lambda_visitor<RT, Lambdas...>
18 typedef lambda_visitor<RT , Lambdas...> base_type;
20 using base_type::operator();
21 lambda_visitor(F f, Lambdas... lambdas)
22 : F(f), base_type(lambdas...)
26 template <typename RT, typename F>
27 struct lambda_visitor<RT, F> : F
29 typedef RT result_type;
36 template <typename RT>
37 struct lambda_visitor<RT>
39 typedef RT result_type;
42 template <typename RT, typename... Lambdas>
43 lambda_visitor<RT, Lambdas...> make_lambda_visitor(Lambdas... lambdas)
45 return { lambdas... };