
Dave Steffen wrote:
Sebastian Redl writes:
On Mon, September 18, 2006 12:52 pm, Rob Caldecott wrote:
Can the pair be declared without a typedef? Is this a limitation of the MS compiler?
It is a limitation of the preprocessor. It does not recognize <> as any sort of parentheses, so it thinks the , separating the template parameters is a macro argument separator.
You can try wrapping the whole argument in parentheses: BOOST_FOREACH((std::pair
p), m) But I'm not sure if the PP passes the parentheses on - in that case, you might get syntax errors in the generated code. If that's the case, you'll have to use the typedef.
I've done something like this:
#include "boost/tuple/tuple.hpp"
#define FOREACH_PAIR( KEY, VAL, COL) FOREACH (boost::tie(KEY,VAL),COL)
// and then, for example
int key, value;
FOREACH_PAIR(key, value m);
It's not perfect; specfically, I don't think that you can write into the map this way. I suspect there _is_ a way for that to work, I just haven't figured it out yet. :-)
I'd like the eventual "official" FOREACH to have some additional variations like this...
Boost.Parameter(cvs head) seems to already
have a workaround for it.
#include