From 22c81b2b3f40e9478f40053c88aed459209379f2 Mon Sep 17 00:00:00 2001 From: Aleksey Gurtovoy Date: Sat, 8 Jun 2002 06:21:19 +0000 Subject: [PATCH] MSVC fixes [SVN r14109] --- include/boost/preprocessor/enum.hpp | 53 +++++++++++++++---- include/boost/preprocessor/repeat.hpp | 32 +++++++---- include/boost/preprocessor/repeat_from_to.hpp | 52 ++++++++++++++---- 3 files changed, 105 insertions(+), 32 deletions(-) diff --git a/include/boost/preprocessor/enum.hpp b/include/boost/preprocessor/enum.hpp index 0178c0d..ef899ce 100644 --- a/include/boost/preprocessor/enum.hpp +++ b/include/boost/preprocessor/enum.hpp @@ -60,18 +60,49 @@ are directly supported.

# define BOOST_PP_ENUM(COUNT,MACRO,DATA) #endif -#define BOOST_PP_ENUM\ - BOOST_PP_AUTO_REC_CAT1(BOOST_PP_ENUM,BOOST_PP_REPEAT_AUTO_REC1(BOOST_PP_AUTO_REC_ID,(1))) -#define BOOST_PP_ENUMBOOST_PP_REPEAT_AUTO_REC1(M,P)\ - BOOST_PP_AUTO_REC_CAT2(BOOST_PP_ENUM,BOOST_PP_REPEAT_AUTO_REC2(BOOST_PP_AUTO_REC_ID,(2))) -#define BOOST_PP_ENUMBOOST_PP_REPEAT_AUTO_REC2(M,P)\ - BOOST_PP_AUTO_REC_CAT3(BOOST_PP_ENUM,BOOST_PP_REPEAT_AUTO_REC3(BOOST_PP_AUTO_REC_ID,(3))) -#define BOOST_PP_ENUMBOOST_PP_REPEAT_AUTO_REC3(M,P)\ - (TOO MANY NESTED REPEATS!) +#if !defined(BOOST_NO_COMPILER_CONFIG) && defined(_MSC_VER) + +/* This is a workaround for a MSVC++ PP bug. You'll need to add further + * BOOST_PP_ENUM_AUTO_REC3/4/etc. wrapping as the maximum level of + * nesting REPEATS increases + */ +# define BOOST_PP_ENUM\ + BOOST_PP_AUTO_REC_CAT1(BOOST_PP_ENUM_,BOOST_PP_ENUM_AUTO_REC2(\ + BOOST_PP_ENUM_AUTO_REC1,(BOOST_PP_AUTO_REC_ID,(1))\ + )) + +# define BOOST_PP_ENUM_BOOST_PP_ENUM_AUTO_REC1(M,P)\ + BOOST_PP_AUTO_REC_CAT2(BOOST_PP_ENUM_,BOOST_PP_ENUM_AUTO_REC2(BOOST_PP_AUTO_REC_ID,(2))) +# define BOOST_PP_ENUM_BOOST_PP_ENUM_AUTO_REC2(M,P)\ + BOOST_PP_AUTO_REC_CAT3(BOOST_PP_ENUM_,BOOST_PP_ENUM_AUTO_REC3(BOOST_PP_AUTO_REC_ID,(3))) +# define BOOST_PP_ENUM_BOOST_PP_ENUM_AUTO_REC3(M,P)\ + (TOO MANY NESTED REPEATS!) + +# define BOOST_PP_ENUM_AUTO_REC1(M,P) BOOST_PP_EXPAND(M P) +# define BOOST_PP_ENUM_AUTO_REC2(M,P) BOOST_PP_EXPAND(M P) +# define BOOST_PP_ENUM_AUTO_REC3(M,P) BOOST_PP_EXPAND(M P) + +# define BOOST_PP_ENUM_1(C,M,D) BOOST_PP_ENUM_AUTO_REC1(BOOST_PP_REPEAT,(C,BOOST_PP_ENUM_M1,(M,D))) +# define BOOST_PP_ENUM_2(C,M,D) BOOST_PP_ENUM_AUTO_REC2(BOOST_PP_REPEAT,(C,BOOST_PP_ENUM_M2,(M,D))) +# define BOOST_PP_ENUM_3(C,M,D) BOOST_PP_ENUM_AUTO_REC3(BOOST_PP_REPEAT,(C,BOOST_PP_ENUM_M3,(M,D))) + +#else + +# define BOOST_PP_ENUM\ + BOOST_PP_AUTO_REC_CAT1(BOOST_PP_ENUM,BOOST_PP_REPEAT_AUTO_REC1(BOOST_PP_AUTO_REC_ID,(1))) +# define BOOST_PP_ENUMBOOST_PP_REPEAT_AUTO_REC1(M,P)\ + BOOST_PP_AUTO_REC_CAT2(BOOST_PP_ENUM,BOOST_PP_REPEAT_AUTO_REC2(BOOST_PP_AUTO_REC_ID,(2))) +# define BOOST_PP_ENUMBOOST_PP_REPEAT_AUTO_REC2(M,P)\ + BOOST_PP_AUTO_REC_CAT3(BOOST_PP_ENUM,BOOST_PP_REPEAT_AUTO_REC3(BOOST_PP_AUTO_REC_ID,(3))) +# define BOOST_PP_ENUMBOOST_PP_REPEAT_AUTO_REC3(M,P)\ + (TOO MANY NESTED REPEATS!) + +# define BOOST_PP_ENUM1(C,M,D) BOOST_PP_REPEAT(C,BOOST_PP_ENUM_M1,(M,D)) +# define BOOST_PP_ENUM2(C,M,D) BOOST_PP_REPEAT(C,BOOST_PP_ENUM_M2,(M,D)) +# define BOOST_PP_ENUM3(C,M,D) BOOST_PP_REPEAT(C,BOOST_PP_ENUM_M3,(M,D)) + +#endif -#define BOOST_PP_ENUM1(C,M,D) BOOST_PP_REPEAT(C,BOOST_PP_ENUM_M1,(M,D)) -#define BOOST_PP_ENUM2(C,M,D) BOOST_PP_REPEAT(C,BOOST_PP_ENUM_M2,(M,D)) -#define BOOST_PP_ENUM3(C,M,D) BOOST_PP_REPEAT(C,BOOST_PP_ENUM_M3,(M,D)) #if !defined(BOOST_NO_COMPILER_CONFIG) && defined(__MWERKS__) # define BOOST_PP_ENUM_M1(I,MD) BOOST_PP_COMMA_IF(I) BOOST_PP_TUPLE_ELEM(2,0,MD)(I,BOOST_PP_TUPLE_ELEM(2,1,MD)) diff --git a/include/boost/preprocessor/repeat.hpp b/include/boost/preprocessor/repeat.hpp index 7a0b05b..612c252 100644 --- a/include/boost/preprocessor/repeat.hpp +++ b/include/boost/preprocessor/repeat.hpp @@ -65,20 +65,32 @@ are directly supported.

# define BOOST_PP_REPEAT(COUNT,MACRO,DATA) #endif -#define BOOST_PP_REPEAT\ - BOOST_PP_AUTO_REC_CAT1(BOOST_PP_REPEAT,BOOST_PP_REPEAT_AUTO_REC1(BOOST_PP_AUTO_REC_ID,(1))) -#define BOOST_PP_REPEATBOOST_PP_REPEAT_AUTO_REC1(M,P)\ - BOOST_PP_AUTO_REC_CAT2(BOOST_PP_REPEAT,BOOST_PP_REPEAT_AUTO_REC2(BOOST_PP_AUTO_REC_ID,(2))) -#define BOOST_PP_REPEATBOOST_PP_REPEAT_AUTO_REC2(M,P)\ - BOOST_PP_AUTO_REC_CAT3(BOOST_PP_REPEAT,BOOST_PP_REPEAT_AUTO_REC3(BOOST_PP_AUTO_REC_ID,(3))) -#define BOOST_PP_REPEATBOOST_PP_REPEAT_AUTO_REC3(M,P)\ +#if !defined(BOOST_NO_COMPILER_CONFIG) && defined(_MSC_VER) +/* This is a workaround for a MSVC++ PP bug. You'll need to add further + * BOOST_PP_REPEAT_AUTO_REC3/4/etc. wrapping as the maximum level of + * nesting REPEATS increases + */ +# define BOOST_PP_REPEAT\ + BOOST_PP_AUTO_REC_CAT1(BOOST_PP_REPEAT_,BOOST_PP_REPEAT_AUTO_REC2(\ + BOOST_PP_REPEAT_AUTO_REC1,(BOOST_PP_AUTO_REC_ID,(1))\ + )) +#else +# define BOOST_PP_REPEAT\ + BOOST_PP_AUTO_REC_CAT1(BOOST_PP_REPEAT_,BOOST_PP_REPEAT_AUTO_REC1(BOOST_PP_AUTO_REC_ID,(1))) +#endif + +#define BOOST_PP_REPEAT_BOOST_PP_REPEAT_AUTO_REC1(M,P)\ + BOOST_PP_AUTO_REC_CAT2(BOOST_PP_REPEAT_,BOOST_PP_REPEAT_AUTO_REC2(BOOST_PP_AUTO_REC_ID,(2))) +#define BOOST_PP_REPEAT_BOOST_PP_REPEAT_AUTO_REC2(M,P)\ + BOOST_PP_AUTO_REC_CAT3(BOOST_PP_REPEAT_,BOOST_PP_REPEAT_AUTO_REC3(BOOST_PP_AUTO_REC_ID,(3))) +#define BOOST_PP_REPEAT_BOOST_PP_REPEAT_AUTO_REC3(M,P)\ (TOO MANY NESTED REPEATS!) #define BOOST_PP_REPEAT_AUTO_REC1(M,P) BOOST_PP_EXPAND(M P) #define BOOST_PP_REPEAT_AUTO_REC2(M,P) BOOST_PP_EXPAND(M P) #define BOOST_PP_REPEAT_AUTO_REC3(M,P) BOOST_PP_EXPAND(M P) -#define BOOST_PP_REPEAT1(C,M,D) BOOST_PP_REPEAT_AUTO_REC1(BOOST_PP_R1_DELAY(C),(M,D)) +#define BOOST_PP_REPEAT_1(C,M,D) BOOST_PP_REPEAT_AUTO_REC1(BOOST_PP_R1_DELAY(C),(M,D)) #define BOOST_PP_R1_DELAY(C) BOOST_PP_R1_##C #define BOOST_PP_R1_0(M,D) #define BOOST_PP_R1_1(M,D) M(0,D) @@ -210,7 +222,7 @@ are directly supported.

#define BOOST_PP_R1_127(M,D) BOOST_PP_R1_126(M,D) M(126,D) #define BOOST_PP_R1_128(M,D) BOOST_PP_R1_127(M,D) M(127,D) -#define BOOST_PP_REPEAT2(C,M,D) BOOST_PP_REPEAT_AUTO_REC2(BOOST_PP_R2_DELAY(C),(M,D)) +#define BOOST_PP_REPEAT_2(C,M,D) BOOST_PP_REPEAT_AUTO_REC2(BOOST_PP_R2_DELAY(C),(M,D)) #define BOOST_PP_R2_DELAY(C) BOOST_PP_R2_##C #define BOOST_PP_R2_0(M,D) #define BOOST_PP_R2_1(M,D) M(0,D) @@ -342,7 +354,7 @@ are directly supported.

#define BOOST_PP_R2_127(M,D) BOOST_PP_R2_126(M,D) M(126,D) #define BOOST_PP_R2_128(M,D) BOOST_PP_R2_127(M,D) M(127,D) -#define BOOST_PP_REPEAT3(C,M,D) BOOST_PP_REPEAT_AUTO_REC3(BOOST_PP_R3_DELAY(C),(M,D)) +#define BOOST_PP_REPEAT_3(C,M,D) BOOST_PP_REPEAT_AUTO_REC3(BOOST_PP_R3_DELAY(C),(M,D)) #define BOOST_PP_R3_DELAY(C) BOOST_PP_R3_##C #define BOOST_PP_R3_0(M,D) #define BOOST_PP_R3_1(M,D) M(0,D) diff --git a/include/boost/preprocessor/repeat_from_to.hpp b/include/boost/preprocessor/repeat_from_to.hpp index 06621b0..7a4271d 100644 --- a/include/boost/preprocessor/repeat_from_to.hpp +++ b/include/boost/preprocessor/repeat_from_to.hpp @@ -60,18 +60,48 @@ are directly supported.

# define BOOST_PP_REPEAT_FROM_TO(FIRST,LAST,MACRO,DATA) #endif -#define BOOST_PP_REPEAT_FROM_TO\ - BOOST_PP_AUTO_REC_CAT1(BOOST_PP_REPEAT_FROM_TO,BOOST_PP_REPEAT_AUTO_REC1(BOOST_PP_AUTO_REC_ID,(1))) -#define BOOST_PP_REPEAT_FROM_TOBOOST_PP_REPEAT_AUTO_REC1(M,P)\ - BOOST_PP_AUTO_REC_CAT2(BOOST_PP_REPEAT_FROM_TO,BOOST_PP_REPEAT_AUTO_REC2(BOOST_PP_AUTO_REC_ID,(2))) -#define BOOST_PP_REPEAT_FROM_TOBOOST_PP_REPEAT_AUTO_REC2(M,P)\ - BOOST_PP_AUTO_REC_CAT3(BOOST_PP_REPEAT_FROM_TO,BOOST_PP_REPEAT_AUTO_REC3(BOOST_PP_AUTO_REC_ID,(3))) -#define BOOST_PP_REPEAT_FROM_TOBOOST_PP_REPEAT_AUTO_REC3(M,P)\ - (TOO MANY NESTED REPEATS!) +#if !defined(BOOST_NO_COMPILER_CONFIG) && defined(_MSC_VER) -#define BOOST_PP_REPEAT_FROM_TO1(F,L,M,D) BOOST_PP_REPEAT(BOOST_PP_SUB(L,F),BOOST_PP_REPEAT_FROM_TO_M1,(F,M,D)) -#define BOOST_PP_REPEAT_FROM_TO2(F,L,M,D) BOOST_PP_REPEAT(BOOST_PP_SUB(L,F),BOOST_PP_REPEAT_FROM_TO_M2,(F,M,D)) -#define BOOST_PP_REPEAT_FROM_TO3(F,L,M,D) BOOST_PP_REPEAT(BOOST_PP_SUB(L,F),BOOST_PP_REPEAT_FROM_TO_M3,(F,M,D)) +/* This is a workaround for a MSVC++ PP bug. You'll need to add further + * BOOST_PP_REPEAT_FT_AUTO_REC3/4/etc. wrapping as the maximum level of + * nesting REPEATS increases + */ +# define BOOST_PP_REPEAT_FROM_TO\ + BOOST_PP_AUTO_REC_CAT1(BOOST_PP_REPEAT_FROM_TO_,BOOST_PP_REPEAT_FT_AUTO_REC2(\ + BOOST_PP_REPEAT_FT_AUTO_REC1,(BOOST_PP_AUTO_REC_ID,(1))\ + )) + +# define BOOST_PP_REPEAT_FROM_TO_BOOST_PP_REPEAT_FT_AUTO_REC1(M,P)\ + BOOST_PP_AUTO_REC_CAT2(BOOST_PP_REPEAT_FROM_TO_,BOOST_PP_REPEAT_FT_AUTO_REC2(BOOST_PP_AUTO_REC_ID,(2))) +# define BOOST_PP_REPEAT_FROM_TO_BOOST_PP_REPEAT_FT_AUTO_REC2(M,P)\ + BOOST_PP_AUTO_REC_CAT3(BOOST_PP_REPEAT_FROM_TO_,BOOST_PP_REPEAT_FT_AUTO_REC3(BOOST_PP_AUTO_REC_ID,(3))) +# define BOOST_PP_REPEAT_FROM_TO_BOOST_PP_REPEAT_FT_AUTO_REC3(M,P)\ + (TOO MANY NESTED REPEATS!) + +# define BOOST_PP_REPEAT_FT_AUTO_REC1(M,P) BOOST_PP_EXPAND(M P) +# define BOOST_PP_REPEAT_FT_AUTO_REC2(M,P) BOOST_PP_EXPAND(M P) +# define BOOST_PP_REPEAT_FT_AUTO_REC3(M,P) BOOST_PP_EXPAND(M P) + +# define BOOST_PP_REPEAT_FROM_TO_1(F,L,M,D) BOOST_PP_REPEAT_FT_AUTO_REC1(BOOST_PP_REPEAT,(BOOST_PP_SUB(L,F),BOOST_PP_REPEAT_FROM_TO_M1,(F,M,D))) +# define BOOST_PP_REPEAT_FROM_TO_2(F,L,M,D) BOOST_PP_REPEAT_FT_AUTO_REC2(BOOST_PP_REPEAT,(BOOST_PP_SUB(L,F),BOOST_PP_REPEAT_FROM_TO_M2,(F,M,D))) +# define BOOST_PP_REPEAT_FROM_TO_3(F,L,M,D) BOOST_PP_REPEAT_FT_AUTO_REC3(BOOST_PP_REPEAT,(BOOST_PP_SUB(L,F),BOOST_PP_REPEAT_FROM_TO_M3,(F,M,D))) + +#else + +# define BOOST_PP_REPEAT_FROM_TO\ + BOOST_PP_AUTO_REC_CAT1(BOOST_PP_REPEAT_FROM_TO_,BOOST_PP_REPEAT_AUTO_REC1(BOOST_PP_AUTO_REC_ID,(1))) +# define BOOST_PP_REPEAT_FROM_TO_BOOST_PP_REPEAT_AUTO_REC1(M,P)\ + BOOST_PP_AUTO_REC_CAT2(BOOST_PP_REPEAT_FROM_TO_,BOOST_PP_REPEAT_AUTO_REC2(BOOST_PP_AUTO_REC_ID,(2))) +# define BOOST_PP_REPEAT_FROM_TO_BOOST_PP_REPEAT_AUTO_REC2(M,P)\ + BOOST_PP_AUTO_REC_CAT3(BOOST_PP_REPEAT_FROM_TO_,BOOST_PP_REPEAT_AUTO_REC3(BOOST_PP_AUTO_REC_ID,(3))) +# define BOOST_PP_REPEAT_FROM_TO_BOOST_PP_REPEAT_AUTO_REC3(M,P)\ + (TOO MANY NESTED REPEATS!) + +# define BOOST_PP_REPEAT_FROM_TO_1(F,L,M,D) BOOST_PP_REPEAT(BOOST_PP_SUB(L,F),BOOST_PP_REPEAT_FROM_TO_M1,(F,M,D)) +# define BOOST_PP_REPEAT_FROM_TO_2(F,L,M,D) BOOST_PP_REPEAT(BOOST_PP_SUB(L,F),BOOST_PP_REPEAT_FROM_TO_M2,(F,M,D)) +# define BOOST_PP_REPEAT_FROM_TO_3(F,L,M,D) BOOST_PP_REPEAT(BOOST_PP_SUB(L,F),BOOST_PP_REPEAT_FROM_TO_M3,(F,M,D)) + +#endif #define BOOST_PP_REPEAT_FROM_TO_M1(I,FMD) BOOST_PP_TUPLE_ELEM(3,1,FMD)(BOOST_PP_ADD(I,BOOST_PP_TUPLE_ELEM(3,0,FMD)),BOOST_PP_TUPLE_ELEM(3,2,FMD)) #define BOOST_PP_REPEAT_FROM_TO_M2(I,FMD) BOOST_PP_TUPLE_ELEM(3,1,FMD)(BOOST_PP_ADD(I,BOOST_PP_TUPLE_ELEM(3,0,FMD)),BOOST_PP_TUPLE_ELEM(3,2,FMD))