3

In the following piece of code:

BOOST_FOREACH(std::pair<PID, bool> &itval, completedEs_) {
    allCompleted &= it->second;
}

I'm getting this error:

error: macro "BOOST_FOREACH" passed 3 arguments, but takes just 2

I'm only passing 2 arguments, what's going on?

Matt Joiner
  • 112,946
  • 110
  • 377
  • 526

2 Answers2

8

The first type is being parsed as two arguments since it contains a comma. As a workaround you could typedef the type:

typedef std::pair<PID, bool> PID_bool_pair;
BOOST_FOREACH( PID_bool_pair &itval, completedEs_) {
    ...
}
Alex Deem
  • 4,717
  • 1
  • 21
  • 24
2

You can't do that because of BOOST_FOREACH macro limitations, rewrite it like:

//...
typedef std::pair<PID, bool> mypair;
BOOST_FOREACH(mypair &itval, completedEs_) {
    allCompleted &= it->second;
}
//...
Ivan G.
  • 5,027
  • 2
  • 37
  • 65