J'essaye de générer des operateurs pour ma lib d'algèbre linéaire avec Boost.Preprocessor et ca marche pas.

En detail, voici le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
#define GEN_ALGEBRAIC_OPS_REP_MACRO(z, n, param)			\
		BOOST_PP_TUPLE_ELEM(2, 0, param)					\
		BOOST_PP_CAT(OPERATOR,								\
			BOOST_PP_ARRAY_ELEM(n,							\
				BOOST_PP_TUPLE_ELEM(2, 1, param)			\
			)												\
		)													\
		(const BOOST_PP_TUPLE_ELEM(2, 0, param)& rlv) const \
		{													\
			BOOST_PP_TUPLE_ELEM(2, 0, param)	rv;			\
			return rv;										\
		}													\
 
#define	GEN_ALGEBRAIC_OPS(type, size, operators)\
		BOOST_PP_REPEAT_FROM_TO(				\
			0,									\
			BOOST_PP_ARRAY_SIZE(operators),		\
			GEN_ALGEBRAIC_OPS_REP_MACRO,		\
			(type, operators)					\
		)										\
En générant mes operateurs pour un vec2 (par exemple) de la facon suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
GEN_ALGEBRAIC_OPS(vec2, 2, ALGEBRAIC_OPS)
avec ALGEBRAIC_OPS défini comme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
#define ALGEBRAIC_OPS		(4, (Add, Sub, Mul, Div))
cela me donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
vec2 operatorAdd (const vec2& rlv) const { vec2 rv; return rv; } 
vec2 operatorSub (const vec2& rlv) const { vec2 rv; return rv; } 
vec2 operatorMul (const vec2& rlv) const { vec2 rv; return rv; } 
vec2 operatorDiv (const vec2& rlv) const { vec2 rv; return rv; }
comme attendu, mais avec ALGEBRAIC_OPS définis comme cela
Code : Sélectionner tout - Visualiser dans une fenêtre à part
#define ALGEBRAIC_OPS		(4, (+, -, *, /))
j'obtiens l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
error: pasting "operator" and "+" does not give a valid preprocessor token
error: pasting "operator" and "-" does not give a valid preprocessor token
error: pasting "operator" and "*" does not give a valid preprocessor token
error: pasting "operator" and "/" does not give a valid preprocessor token
des idées, voire des solutions?