https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124268

--- Comment #6 from Ben Boeckel <bugzilla.gcc at me dot benboeckel.net> ---
Why is `std` special? If it is not the provider of `export module std` that
provides the initializer symbol, who should do it? If it is more than one, what
happens with the umpteen copies of the initializer? If it is one, how is anyone
going to know that they need to do it?

Or is it expected that every project builds all modules they import and link
their `.o` files? If that's the case, please provide a flag to only give the
module initializer symbol in such an object because any C++ language symbols
that also show up there are definitely in ODR-violation land. I will grant that
the initializer symbol is an impl and I can imagine that there is a magic rule
for it, but:

- I do not believe that `import std` should be special (mechanically; CMake
definitely makes it available in a magic way, but it is no different than a
typical "module from another project" way at the moment)
- There is no guarantee (AFAIK) that compiling `std.cc` will never provide
non-initializer symbols that are also ODR-violating

Reply via email to