C++ Logo


Advanced search

Re: P2898R0: Importable Headers are Not Universally Implementable

From: Mathias Stearn <redbeard0531_at_[hidden]>
Date: Fri, 26 May 2023 13:55:43 +0200
On Fri, May 26, 2023 at 1:44 PM Jens Maurer <jens.maurer_at_[hidden]> wrote:

> On 26/05/2023 11.23, Mathias Stearn wrote:
> > Perhaps we mostly disagree on the framing though. My take is that the
> problem here _isn't_ that foo.h was declared as importable. The problem is
> that qux.h is trying to change the meaning of the foo.h header.
> That's a fine interpretation from my point of view.
> CWG2732 will clarify that any macros that happen to be active at the
> point of import have no bearing on the contents of an importable header:
> https://cplusplus.github.io/CWG/issues/2732.html

Given the note in http://eel.is/c++draft/cpp.import#5 applying to the
definition of the term "macro definition", we should probably change the
CWG2732 note to say something like "macro definitions and predefined
macros". While -D predefined macros are somewhat outside the scope of the
standard, and the standard has no concept of a build using different values
for the standardized predefined macros for different TUs (which is
unfortunately common practice), I think we should be clear (in a note)
that the predefined macros used for a header unit are those used when
compiling *its* TU, not the importer's.

> That still allows to set -DDEBUG in your user-defined "list of
> importable headers" for this particular header (or more globally),
> if you so feel.
> Jens

Received on 2023-05-26 11:55:57