C++ Logo


Advanced search

Re: Undefining a compiler 's predefined macro

From: Edward Diener <eldlistmailingz_at_[hidden]>
Date: Sun, 22 Mar 2020 08:32:08 -0400
On 3/22/2020 6:22 AM, Ville Voutilainen via Std-Discussion wrote:
> On Sun, 22 Mar 2020 at 12:12, Edward Diener via Std-Discussion
> <std-discussion_at_[hidden]> wrote:
>> Is it valid C++ to undefine a compiler's predefined macro ? According to
>> the C++ standard, in 19.8.4:
>> If any of the pre-defined macro names in this subclause, or the
>> identifier defined, is the subject of a #define
>> or a #undef preprocessing directive, the behavior is undefined.
>> 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.

Received on 2020-03-22 07:35:05