Boost logo

Boost :

From: Eric Niebler (eric_at_[hidden])
Date: 2004-02-28 17:26:15

This concerns all boost developers. Please read!

I have just added documentation for how to deal with min/max in boost
code. I have added it to the "Boost Library Requirements and Guidelines"
document (boost/more/lib_guide.htm). That seemed the appropriate place,
but it might be hard to find. If anyone thinks this belongs in a more
prominent place, please suggest one.

For reference, here is the text I have added:

Make sure your code compiles in the presence of the min() and max() 
macros. Some platform headers define min() and max() macros which cause 
some common C++ constructs to fail to compile. Some simple tricks can 
protect your code from inappropriate macro substitution:
     * If you want to call std::min() or std::max():
           o Use (std::min)(a,b) if you do not require 
           o Use boost::std_min(a,b) if you do require argument-dependent
             look-up. boost::std_min() delegates to std::min().
     * If you want to call std::numeric_limits<int>::max(), use
       (std::numeric_limits<int>::max)() instead.
     * If you want to call a min() or max() member function, instead to
       doing obj.min(), use (obj.min)().
     * If you want to declare or define a function or a member function
       named min or max, then you must use the
       BOOST_PREVENT_MACRO_SUBSTITUTION macro. Instead of writing int
       min() { return 0; } you should write int min
       BOOST_PREVENT_MACRO_SUBSTITUTION () { return 0; } This is true
       regardless if the function is a free (namespace scope) function, a
       member function or a static member function, and it applies for
       the function declaration as well as the function definition.
Eric Niebler
Boost Consulting

Boost list run by bdawes at, gregod at, cpdaniel at, john at