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 
argument-dependent
             look-up.
           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
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