[PATCH] D33080: [Libc++] Use #pragma push_macro/pop_macro to better handle min/max on Windows

Eric Fiselier via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu May 11 23:33:20 PDT 2017

EricWF added a comment.

In https://reviews.llvm.org/D33080#752202, @bcraig wrote:

> I like the warning that you generate for min and max macros existing.

Only on warn on platforms where we don't have `#pragma push_macro/pop_macro`.

> Is the push_macro / pop_macro the right way to go though?  You could throw extra parenthesis around the declaration and usages of min/max to avoid macro expansion.

I noticed that the Windows STL headers have to do this dance with `new` (even though they do `(foo)(...)` for `min` and `max`). If we're going to need
to guard against a bunch of macros I would like to use a single approach.  Other than updating the `#if defined(min) || defined(max)` lines it's trivial to guard
against additional macros.

Also there are a lot of call sites and declarations for `min` and `max`.  I think this approach is less invasive and more consistent. We're obviously not going to
use `(foo)(...)` syntax everywhere, so lets use it nowhere.


More information about the cfe-commits mailing list