C++ Logo

STD-DISCUSSION

Advanced search

Subject: Re: Undefining a compiler 's predefined macro
From: Edward Diener (eldlistmailingz_at_[hidden])
Date: 2020-03-22 07:32:08


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.


STD-DISCUSSION list run by std-discussion-owner@lists.isocpp.org

Older Archives on Google Groups