Hello,
I tried to use the BOOST_PP_SEQ_CAT with a sequence of parenthesized
comma-separated pair of token. It works fine with visual 2010 but
fails with gcc. I first think that there were a problem in the
specific gcc implementation part. That's why I opened the issue 9633
: https://svn.boost.org/trac/boost/ticket/9633
But, it has recently been closed for invalidity, the corrector
telling that it is not a valid use.
I have not read the entire help of the PP library but as far as I
understand the sequence definition given in A.4.5.1.
(http://www.boostpro.com/mplbook/preprocessor.html) as "any string
of nonempty
parenthesized macro arguments." and the definition of
macro arguments in A.2.3, I fail to see why the sequence could be
incorrect. Specially when I read the end of the paragraph :
"
It is possible to pass either string of tokens above as
part of a
single macro argument, provided it is parenthesized:
FOO((std::pair<int,int>)) // one argument
FOO(({ int x = 1, y = 2; return x+y; })) // one argument
"
I fail to see where in the dedicated entry for BOOST_PP_SEQ_CAT
(http://www.boost.org/doc/libs/1_55_0/libs/preprocessor/doc/ref/seq_cat.html)
there is a rule I violated.
So my questions are :
=> why the code I proposed is invalid ?
=> Is the workaround proposed with BOOST_PP_SEQ_FOR_EACH is also
a missused and may fail according to evolutions of the library ?
Thanks in advance for your answers.
The code :
#include <boost\preprocessor\seq\cat.hpp>
#define SOME_SEQUENCE (('a',1)) (('b',2)) (('c',3)) (('d',4)) (('e',5))
struct dummy
{
dummy& operator()(char,int) {return *this;}
};
int main()
{
dummy() BOOST_PP_SEQ_CAT(SOME_SEQUENCE);
// Visual 2010 generates dummy() ('a',1)('b',2)('c',3)('d',4)('e',5);
// gcc fails with compiler errors due to the comma I suppose
return 0;
}