2010-10-20 12 views
2

j'ai essayé de compiler un échantillon de la bibliothèque Boost.Preprocessor qui est:Boost préprocesseur: Sample ne fonctionne pas

#include <boost/preprocessor/seq/insert.hpp> 
#define SEQ (a)(b)(d) 
BOOST_PP_SEQ_INSERT(SEQ, 2, c) // expands to (a)(b)(c)(d) 

sur Visual Studio 2008 et je reçois l'erreur error C2065: 'b' : undeclared identifier

est-il un problème avec l'échantillon ou est-ce que je manque quelque chose ??

Veuillez noter: La définition de séquence elle-même est correcte. Pour le montrer, je compilé ce code:

#include <boost/preprocessor/cat.hpp> 
#include <boost/preprocessor/seq/for_each.hpp> 

#define SEQ (w)(x) 

#define MACRO(r, data, elem) BOOST_PP_CAT(elem, data) 

struct w_ 
{ 
int x; 
}; 
void test() 
{ 
BOOST_PP_SEQ_FOR_EACH(MACRO, _, SEQ); 
    x_.x = 3; 
} 

AVERTISSEMENT: ce code est un code de WTF, et je ne l'intention d'utiliser PP BOOST comme ça :-)

+0

Alors, quel code produit l'erreur citée? – UncleBens

Répondre

1

Eh bien, vous essayez de compiler une source fichier contenant:

(a)(b)(c)(d) 

Je suppose que vous devez soit mettre cela dans un contexte où ce code est logique, ou tout simplement exécuter le préprocesseur (sans compiler le résultat).

+0

Je ne pense pas que ce soit vrai, voir mon Edit – Philipp

+0

@Philip: Si vous prenez le fichier de trois lignes (échantillon de boost) et * le compiler *, le préprocesseur le transformera en '(a) (b) (c) (d) 'et puis le compilateur vient et n'a aucun sens hors de celui-ci. Ce code n'est pas supposé faire quoi que ce soit d'autre. – UncleBens

+0

ahh, je vois. Ma faute, merci pour la clarification. – Philipp