/*============================================================================= 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 #include using boost::spirit::x3::make_context; using boost::spirit::x3::get; int bb; int cc; struct b_ctx; struct c_ctx; template void a(Context const& context) { bb = get(context); cc = get(context); } template void b(Context const& context) { int bi = 123; a(make_context(bi, context)); } void c() { int ci = 456; b(make_context(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 }