123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- /*=============================================================================
- Copyright (c) 2001-2013 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)
- =============================================================================*/
- #include <boost/spirit/home/x3/support/context.hpp>
- #include <iostream>
- using boost::spirit::x3::make_context;
- using boost::spirit::x3::get;
- int bb;
- int cc;
- struct b_ctx;
- struct c_ctx;
- template <typename Context>
- void a(Context const& context)
- {
- bb = get<b_ctx>(context);
- cc = get<c_ctx>(context);
- }
- template <typename Context>
- void b(Context const& context)
- {
- int bi = 123;
- a(make_context<b_ctx>(bi, context));
- }
- void c()
- {
- int ci = 456;
- b(make_context<c_ctx>(ci));
- }
- void test()
- {
- c();
- // MSVC generates this code:
- // mov DWORD PTR ?bb@@3HA, 123
- // mov DWORD PTR ?cc@@3HA, 456
- //
- // GCC generates this code:
- // movl $123, _bb
- // movl $456, _cc
- }
|