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