Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2004-02-24 04:42:44


"Eric Niebler" <eric_at_[hidden]> writes:

> John Maddock wrote:
>> Would you like to make and manage the change? Remove the workarounds from
>> win32.hpp, and then patch all occurrences of min and max throughout boost?
>> John.
>
> <recap>
> We agreed to make boost work in the presence of the min/max macros by
> wrapping all min/max function identifiers in parens, like
> (std::min)(a,b);
> </recap>
>
> I have spent some time and made the 800 or so edits throughout boost
> required to make it play nice with the min/max macros. I'm running
> regressions now. I have a couple of questions about procedure before
> I can commit the changes.
>
> 1) Is this a good time?

Yep.

> I know there's talk about a 1.31.1
> release. Will this be done from the 1.31.0 branch or from main?

>From the branch.

> I
> don't want to destabilize before a release.

Good thinking.

> 2) I can't test with old compilers, which are the ones most likely to
> have a hard time with this change.

They all compile and run the following:

  namespace std {
    template<class T> const T& min(const T& a, const T& b) { return a<b?a:b; }
  }
  int main()
  {
      int x = 0;
      int y = 1;
      return (std::min)(x,y);
  }

But where will the definition of min come from on broken stdlib
implementations?

> Also, I'm not a CVS guru. If all
> hell breaks loose as a result of this change, is there someone
> willing to help me back it out?

Just "cvs tag" to mark the state before you start making changes and
it'll be comparitively easy.

> 3) Is there a boost developer style guide where we can document the
> fact that all calls to min/max functions must be wrapped in parens?
>
> 4) This is the sort of thing developers will forget to do even if it's
> in a style guide. A simple way of ensuring this stays fixed would
> be to run the regressions with min() and max() #defined to garbage,
> so that violations are detected and corrected early. Is this
> possible?

Yes, it's possible, but that'll only detect the usage:

     min(x,y)

and not

    std::min(x,y)

both of which are going to be banned, right?

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk