
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... ---------------------------------------------------------------------- Dave Steffen, Ph.D. Software Engineer IV Disobey this command! Numerica Corporation - Douglas Hofstadter dgsteffen at numerica dot us