I am agree with your clarification  of the issue regarding having to re-run the preprocessor.  I suspect I am not quite sure about the medicine :-)

-- Gaby

From: Daniel Ruoso <daniel@ruoso.com>
Sent: Friday, June 18, 2021 11:21:31 AM
To: Gabriel Dos Reis <gdr@microsoft.com>
Cc: sg15@lists.isocpp.org <sg15@lists.isocpp.org>; David Blaikie <dblaikie@gmail.com>
Subject: Re: [SG15] Draft: Requirements for Usage of C++ Modules at Bloomberg
On Fri, Jun 18, 2021 at 2:01 PM Gabriel Dos Reis <gdr@microsoft.com> wrote:
  • but you cannot discover the graph with a simple lexer 

Yes, and I have not found that to be an actual problem in practice.  In fact there is really nothing new here

You are right that when you look at the translation units you're trying to build, nothing changes. And, to be clear, I'm not trying to change the language to preclude the use of macros in the source files themselves.

What I'm advocating for is that when you have a pre-built artifact, having to re-run that preprocessor for the module interface files at best is repeating work that was already done when the library was built, at worst may introduce an ODR violation. The requirement that I'm presenting is scoped for when you're consuming modules outside of the current build.