1 /*=============================================================================
2 Copyright (c) 2001-2014 Joel de Guzman
3 Copyright (c) 2013 Agustín Bergé
4 http://spirit.sourceforge.net/
6 Distributed under the Boost Software License, Version 1.0. (See accompanying
7 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8 =============================================================================*/
9 #if !defined(BOOST_SPIRIT_X3_SUBCONTEXT_APR_15_2013_0840AM)
10 #define BOOST_SPIRIT_X3_SUBCONTEXT_APR_15_2013_0840AM
12 #include <boost/spirit/home/x3/support/context.hpp>
13 #include <boost/spirit/home/x3/support/unused.hpp>
15 namespace boost { namespace spirit { namespace x3
17 template <typename... T>
23 template <typename Context>
24 subcontext(Context const& /*context*/)
27 template <typename ID_>
37 : context<typename T::first_type, typename T::second_type>
40 typename T::first_type, typename T::second_type
43 template <typename Context>
44 subcontext(Context const& context)
45 : context_type(x3::get<typename T::first_type>(context))
48 using context_type::get;
51 template <typename T, typename... Tail>
52 struct subcontext<T, Tail...>
55 typename T::first_type, typename T::second_type
59 typedef subcontext<Tail...> base_type;
61 typename T::first_type, typename T::second_type
65 template <typename Context>
66 subcontext(Context const& context)
69 x3::get<typename T::first_type>(context)
70 , *static_cast<base_type*>(this))
73 using context_type::get;