Re: [boost] Requirements: min and max macros
On 02/05/2017 06:15 PM, Vinnie Falco wrote:
From http://www.boost.org/development/requirements.html#Naming
"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:..."
Is this guideline still relevant?
On 7/02/2017 00:48, Vinnie Falco wrote:
On Mon, Feb 6, 2017 at 6:39 AM, Bjorn Reese
wrote: Is this guideline still relevant?
I believe so, at least for Microsoft Visual C++ if you have not defined "NOMINMAX".
If the *application author* has not defined NOMINMAX. Libraries don't get a choice in the matter, except for their own compiled source.
-----Original Message----- From: Boost [mailto:boost-bounces@lists.boost.org] On Behalf Of Bjorn Reese Sent: 06 February 2017 11:40 To: boost@lists.boost.org Subject: Re: [boost] Requirements: min and max macros
On 02/05/2017 06:15 PM, Vinnie Falco wrote:
From http://www.boost.org/development/requirements.html#Naming
"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:..."
Is this guideline still relevant?
Yes - if only because the Boost checking tool
http://www.boost.org/doc/libs/1_63_0/tools/inspect/index.html
will complain if it is missing.
http://www.boost.org/development/requirements.html tells you what to do - search down for max or min.
"
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():
If you do not require argument-dependent look-up, use (std::min)(a,b).
If you do require argument-dependent look-up, you should:
#include
On Tue, Feb 7, 2017 at 11:27 AM, Paul A. Bristow
PS That this question was asked suggests that our tools for finding the right documentation are still lacking (or does this not answer the original poster's question?)
The tools are fine, its just that the docs didn't specifically address the case where min and max are called with explicit template arguments, e.g.: std::minstd::size_t(x, y); However, as Andrey pointed out:
min and max are function-like macros. The code above is not affected by those.
That answers my question. It might be worth adding a sentence describing this case to http://www.boost.org/development/requirements.html to clarify. Regards
participants (4)
-
Bjorn Reese
-
Gavin Lambert
-
Paul A. Bristow
-
Vinnie Falco