t_1_008.cpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /*=============================================================================
  2. Boost.Wave: A Standard compliant C++ preprocessor library
  3. http://www.boost.org/
  4. Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost
  5. Software License, Version 1.0. (See accompanying file
  6. LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  7. =============================================================================*/
  8. // The follwoing is a parametized partially expanding concatenation macro.
  9. // It is a extremly good test of expansion order and the order of operations
  10. // during macro expansion in general.
  11. #define CAT(a, b) a ## b
  12. #define PARTIAL_CAT(i) CAT(PARTIAL_CAT_, i)
  13. #define PARTIAL_CAT_0(a, b) CAT(a, b)
  14. #define PARTIAL_CAT_1(a, b) CAT(PARTIAL ## a, b)
  15. #define PARTIAL_CAT_2(a, b) CAT(a, b ## PARTIAL)
  16. #define PARTIAL_CAT_3(a, b) CAT(PARTIAL ## a, b ## PARTIAL)
  17. #define PARTIAL
  18. #define PARTIALPARTIAL
  19. #define X Token1
  20. #define Y Token2
  21. //R #line 31 "t_1_008.cpp"
  22. //R Token1Token2
  23. PARTIAL_CAT(0)( PARTIAL X, Y PARTIAL )
  24. //R #line 34 "t_1_008.cpp"
  25. //R XToken2
  26. PARTIAL_CAT(1)( PARTIAL X, Y PARTIAL )
  27. //R #line 37 "t_1_008.cpp"
  28. //R Token1Y
  29. PARTIAL_CAT(2)( PARTIAL X, Y PARTIAL )
  30. //R #line 40 "t_1_008.cpp"
  31. //R XY
  32. PARTIAL_CAT(3)( PARTIAL X, Y PARTIAL )
  33. //H 10: t_1_008.cpp(14): #define
  34. //H 08: t_1_008.cpp(14): CAT(a, b)=a ## b
  35. //H 10: t_1_008.cpp(16): #define
  36. //H 08: t_1_008.cpp(16): PARTIAL_CAT(i)=CAT(PARTIAL_CAT_, i)
  37. //H 10: t_1_008.cpp(18): #define
  38. //H 08: t_1_008.cpp(18): PARTIAL_CAT_0(a, b)=CAT(a, b)
  39. //H 10: t_1_008.cpp(19): #define
  40. //H 08: t_1_008.cpp(19): PARTIAL_CAT_1(a, b)=CAT(PARTIAL ## a, b)
  41. //H 10: t_1_008.cpp(20): #define
  42. //H 08: t_1_008.cpp(20): PARTIAL_CAT_2(a, b)=CAT(a, b ## PARTIAL)
  43. //H 10: t_1_008.cpp(21): #define
  44. //H 08: t_1_008.cpp(21): PARTIAL_CAT_3(a, b)=CAT(PARTIAL ## a, b ## PARTIAL)
  45. //H 10: t_1_008.cpp(23): #define
  46. //H 08: t_1_008.cpp(23): PARTIAL=
  47. //H 10: t_1_008.cpp(24): #define
  48. //H 08: t_1_008.cpp(24): PARTIALPARTIAL=
  49. //H 10: t_1_008.cpp(26): #define
  50. //H 08: t_1_008.cpp(26): X=Token1
  51. //H 10: t_1_008.cpp(27): #define
  52. //H 08: t_1_008.cpp(27): Y=Token2
  53. //H 00: t_1_008.cpp(31): PARTIAL_CAT(0), [t_1_008.cpp(16): PARTIAL_CAT(i)=CAT(PARTIAL_CAT_, i)]
  54. //H 02: CAT(PARTIAL_CAT_, 0)
  55. //H 00: t_1_008.cpp(16): CAT(PARTIAL_CAT_, 0), [t_1_008.cpp(14): CAT(a, b)=a ## b]
  56. //H 02: PARTIAL_CAT_0
  57. //H 03: PARTIAL_CAT_0
  58. //H 03: PARTIAL_CAT_0
  59. //H 00: t_1_008.cpp(16): PARTIAL_CAT_0( PARTIAL X, Y PARTIAL ), [t_1_008.cpp(18): PARTIAL_CAT_0(a, b)=CAT(a, b)]
  60. //H 01: t_1_008.cpp(23): PARTIAL
  61. //H 02:
  62. //H 03: _
  63. //H 01: t_1_008.cpp(26): X
  64. //H 02: Token1
  65. //H 03: Token1
  66. //H 01: t_1_008.cpp(27): Y
  67. //H 02: Token2
  68. //H 03: Token2
  69. //H 01: t_1_008.cpp(23): PARTIAL
  70. //H 02:
  71. //H 03: _
  72. //H 02: CAT( Token1, Token2 )
  73. //H 00: t_1_008.cpp(18): CAT( Token1, Token2 ), [t_1_008.cpp(14): CAT(a, b)=a ## b]
  74. //H 02: Token1Token2
  75. //H 03: Token1Token2
  76. //H 03: Token1Token2
  77. //H 00: t_1_008.cpp(34): PARTIAL_CAT(1), [t_1_008.cpp(16): PARTIAL_CAT(i)=CAT(PARTIAL_CAT_, i)]
  78. //H 02: CAT(PARTIAL_CAT_, 1)
  79. //H 00: t_1_008.cpp(16): CAT(PARTIAL_CAT_, 1), [t_1_008.cpp(14): CAT(a, b)=a ## b]
  80. //H 02: PARTIAL_CAT_1
  81. //H 03: PARTIAL_CAT_1
  82. //H 03: PARTIAL_CAT_1
  83. //H 00: t_1_008.cpp(16): PARTIAL_CAT_1( PARTIAL X, Y PARTIAL ), [t_1_008.cpp(19): PARTIAL_CAT_1(a, b)=CAT(PARTIAL ## a, b)]
  84. //H 01: t_1_008.cpp(27): Y
  85. //H 02: Token2
  86. //H 03: Token2
  87. //H 01: t_1_008.cpp(23): PARTIAL
  88. //H 02:
  89. //H 03: _
  90. //H 02: CAT(PARTIALPARTIAL X, Token2 )
  91. //H 00: t_1_008.cpp(19): CAT(PARTIALPARTIAL X, Token2 ), [t_1_008.cpp(14): CAT(a, b)=a ## b]
  92. //H 02: PARTIALPARTIAL XToken2
  93. //H 01: t_1_008.cpp(24): PARTIALPARTIAL
  94. //H 02:
  95. //H 03: _
  96. //H 03: XToken2
  97. //H 03: XToken2
  98. //H 00: t_1_008.cpp(37): PARTIAL_CAT(2), [t_1_008.cpp(16): PARTIAL_CAT(i)=CAT(PARTIAL_CAT_, i)]
  99. //H 02: CAT(PARTIAL_CAT_, 2)
  100. //H 00: t_1_008.cpp(16): CAT(PARTIAL_CAT_, 2), [t_1_008.cpp(14): CAT(a, b)=a ## b]
  101. //H 02: PARTIAL_CAT_2
  102. //H 03: PARTIAL_CAT_2
  103. //H 03: PARTIAL_CAT_2
  104. //H 00: t_1_008.cpp(16): PARTIAL_CAT_2( PARTIAL X, Y PARTIAL ), [t_1_008.cpp(20): PARTIAL_CAT_2(a, b)=CAT(a, b ## PARTIAL)]
  105. //H 01: t_1_008.cpp(23): PARTIAL
  106. //H 02:
  107. //H 03: _
  108. //H 01: t_1_008.cpp(26): X
  109. //H 02: Token1
  110. //H 03: Token1
  111. //H 02: CAT( Token1, Y PARTIALPARTIAL)
  112. //H 00: t_1_008.cpp(20): CAT( Token1, Y PARTIALPARTIAL), [t_1_008.cpp(14): CAT(a, b)=a ## b]
  113. //H 02: Token1Y PARTIALPARTIAL
  114. //H 01: t_1_008.cpp(24): PARTIALPARTIAL
  115. //H 02:
  116. //H 03: _
  117. //H 03: Token1Y_
  118. //H 03: Token1Y_
  119. //H 00: t_1_008.cpp(40): PARTIAL_CAT(3), [t_1_008.cpp(16): PARTIAL_CAT(i)=CAT(PARTIAL_CAT_, i)]
  120. //H 02: CAT(PARTIAL_CAT_, 3)
  121. //H 00: t_1_008.cpp(16): CAT(PARTIAL_CAT_, 3), [t_1_008.cpp(14): CAT(a, b)=a ## b]
  122. //H 02: PARTIAL_CAT_3
  123. //H 03: PARTIAL_CAT_3
  124. //H 03: PARTIAL_CAT_3
  125. //H 00: t_1_008.cpp(16): PARTIAL_CAT_3( PARTIAL X, Y PARTIAL ), [t_1_008.cpp(21): PARTIAL_CAT_3(a, b)=CAT(PARTIAL ## a, b ## PARTIAL)]
  126. //H 02: CAT(PARTIALPARTIAL X, Y PARTIALPARTIAL)
  127. //H 00: t_1_008.cpp(21): CAT(PARTIALPARTIAL X, Y PARTIALPARTIAL), [t_1_008.cpp(14): CAT(a, b)=a ## b]
  128. //H 02: PARTIALPARTIAL XY PARTIALPARTIAL
  129. //H 01: t_1_008.cpp(24): PARTIALPARTIAL
  130. //H 02:
  131. //H 03: _
  132. //H 01: t_1_008.cpp(24): PARTIALPARTIAL
  133. //H 02:
  134. //H 03: _
  135. //H 03: XY_
  136. //H 03: XY_