/*=============================================================================
A Standard compliant C++ preprocessor
Copyright (c) 2001-2004 Hartmut Kaiser
http://spirit.sourceforge.net/
Use, modification and distribution is subject to 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)
See Copyright.txt for full acknowledgements.
=============================================================================*/
// The follwoing is a parametized partially expanding concatenation macro.
// It is a extremly good test of expansion order and the order of operations
// during macro expansion in general.
#define CAT(a, b) a ## b
#define PARTIAL_CAT(i) CAT(PARTIAL_CAT_, i)
#define PARTIAL_CAT_0(a, b) CAT(a, b)
#define PARTIAL_CAT_1(a, b) CAT(PARTIAL ## a, b)
#define PARTIAL_CAT_2(a, b) CAT(a, b ## PARTIAL)
#define PARTIAL_CAT_3(a, b) CAT(PARTIAL ## a, b ## PARTIAL)
#define PARTIAL
#define PARTIALPARTIAL
#define X Token1
#define Y Token2
PARTIAL_CAT(0)( PARTIAL X, Y PARTIAL )
//E #line 34 "test_files/test5.cpp"
//E Token1Token2
PARTIAL_CAT(1)( PARTIAL X, Y PARTIAL )
//E XToken2
PARTIAL_CAT(2)( PARTIAL X, Y PARTIAL )
//E Token1Y
PARTIAL_CAT(3)( PARTIAL X, Y PARTIAL )
//E XY
//R 0