12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- /*=============================================================================
- Copyright (c) 2014 Joel de Guzman
- 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)
- ==============================================================================*/
- #if !defined(BOOST_SPIRIT_X3_LAMBDA_VISITOR_MAY_19_2014_1116AM)
- #define BOOST_SPIRIT_X3_LAMBDA_VISITOR_MAY_19_2014_1116AM
- namespace boost { namespace spirit { namespace x3
- {
- template <typename RT, typename... Lambdas>
- struct lambda_visitor;
- template <typename RT, typename F, typename... Lambdas>
- struct lambda_visitor<RT, F, Lambdas...> : F, lambda_visitor<RT, Lambdas...>
- {
- typedef lambda_visitor<RT , Lambdas...> base_type;
- using F::operator();
- using base_type::operator();
- lambda_visitor(F f, Lambdas... lambdas)
- : F(f), base_type(lambdas...)
- {}
- };
- template <typename RT, typename F>
- struct lambda_visitor<RT, F> : F
- {
- typedef RT result_type;
- using F::operator();
- lambda_visitor(F f)
- : F(f)
- {}
- };
- template <typename RT>
- struct lambda_visitor<RT>
- {
- typedef RT result_type;
- };
- template <typename RT, typename... Lambdas>
- lambda_visitor<RT, Lambdas...> make_lambda_visitor(Lambdas... lambdas)
- {
- return { lambdas... };
- }
- }}}
- #endif
|