C++ Logo


Advanced search

Re: Undefining a compiler 's predefined macro

From: Ville Voutilainen <ville.voutilainen_at_[hidden]>
Date: Sun, 22 Mar 2020 15:38:00 +0200
On Sun, 22 Mar 2020 at 14:32, Edward Diener via Std-Discussion
<std-discussion_at_[hidden]> wrote:
> >> But if a compiler has a documented predefined macro which is not in the
> >> subclause is it valid C++ to undefine that macro, and must a C++
> >> standard conforming compiler allow it ?
> >
> > No, and no. Do you have an example of such a macro? Do you think it's
> > valid to name it
> > in your program, considering http://eel.is/c++draft/lex.name#3 ?
> I had no intention of naming it in my program, other than undefining it.
> I actually have a good reason for undefining a compiler predefined macro
> in the code base in which I am working. However your link suggests that
> it is not valid C++ to undefine a compiler implemented predefined macro
> which starts with a double underscore. But I do find the wording of:
> "In addition, some identifiers are reserved for use by C++
> implementations and shall not be used otherwise; no diagnostic is required."
> a bit vague in that "and shall not be used otherwise" is not given any
> precise meaning. Is undefining a predefined macro "using" the macro ?
> Probably, but the imprecise meaning of the term "used otherwise" can
> certainly be improved in that note.

The "shall not be used otherwise" certainly covers any use that would
change the meaning
of the token - like undefining it. Or using it as a name in your own
definition. So, you can actually
name it, as long as that name means what the implementation defined it
to mean. Any change
to that meaning is IFNDR.

Received on 2020-03-22 08:41:01