/*=============================================================================
|
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
|