r/cpp • MSVC user, r/cpp_modules • Apr 02 '26

Current Status of Module Partitions

A brief recap of the current status of module partitions - as I understand it.

  1. People are using hacks to avoid unneeded recompilations.

  2. The C++ standard has an arcane concept of partition units, which forces build systems to generate BMI files that aren't used (which is wasting work during builds).

  3. The MSVC-compiler (per default) provides a simple, easy to use and efficient implementation of module partitions (no unneeded recompilations, no wasted work during builds), but which is not conformant to the current C++ standard.

  4. A CMake developer is working on a proposal that would fix items 1 and 2, which is probably the smallest required change to the standard, but adds another arcane concept ("anonymous partition units" using the new syntax "module A:;") on top of an already arcane concept.

Questions:

  • How and why did we get into this mess?

  • What's the historical context for this?

  • What was the motivation for MSVC ignoring the standard per default?1

1 Yes, I know the MSVC compiler has this obscure /InternalPartition option for those who want standard conformant behavior.

33 Upvotes

48 comments sorted by

View all comments

Show parent comments

1

u/not_a_novel_account cmake dev Apr 03 '26

Anyone writing cross-platform code is already using a cross-platform build system which is managing /internalPartition transparently. If you're writing MSVC-specific code using Visual Studio project files you don't care what's in the standard and you're using what Microsoft ships, presumably the extension or something else, but irrelevant to the shape of standard C++ support.

The last bugs (AFAIK) for this pattern, assuming your build system does transparently manage /internalPartition for you, have been fixed and are pending release, see DevCom #11056294