1 /*============================================================================= 2 Boost.Wave: A Standard compliant C++ preprocessor library 3 http://www.boost.org/ 4 5 Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost 6 Software License, Version 1.0. (See accompanying file 7 LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 8 =============================================================================*/ 9 10 // tests whether whitespace is correctly handled in macro arguments 11 12 //O --variadics 13 14 #define STRINGIZE1(x) #x 15 #define STRINGIZE(x) STRINGIZE1(x) 16 17 #define MACRO(...) (__VA_ARGS__) - STRINGIZE((__VA_ARGS__)) 18 19 //R #line 20 "t_9_020.cpp" 20 MACRO() //R () - "()" 21 MACRO( ) //R () - "()" 22 MACRO(a) //R (a) - "(a)" 23 MACRO( a ) //R ( a ) - "( a )" 24 MACRO( a ) //R ( a ) - "( a )" 25 MACRO(a,b) //R (a,b) - "(a,b)" 26 MACRO(a, b) //R (a, b) - "(a, b)" 27 MACRO(a ,b) //R (a ,b) - "(a ,b)" 28 MACRO( a ,b, c ) //R ( a ,b, c ) - "( a ,b, c )" 29 MACRO( a ,b, c ) //R ( a ,b, c ) - "( a ,b, c )" 30 31 #undef MACRO 32 #define MACRO(x) [x] 33 34 //R #line 35 "t_9_020.cpp" 35 MACRO() //R [] 36 MACRO( ) //R [] 37 MACRO(123) //R [123] 38 MACRO( 123 ) //R [ 123 ] 39 MACRO( 123 ) //R [ 123 ] 40 41 #define A(x) 1 x 3 42 #define B(x) (1)x(3) 43 44 //R #line 45 "t_9_020.cpp" 45 A(2) //R 1 2 3 46 STRINGIZE(A(2)) //R "1 2 3" 47 STRINGIZE(B(2)) //R "(1)2(3)" 48 STRINGIZE(B( 2 )) //R "(1) 2 (3)" 49