• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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