It’s archaic and low level, but it’s also powerful and expressive. Replacing the CPP would probably just require a new language.
That being said, if constexpr is great; iterating over either sparse or dense arrays with in Blaze without wrapping in two functions was mind-blowing when I discovered I could so easily.
Yes it was tighly coupled with Make that took care of selecting the proper set of files to compile and link based on the platform.
The anti-module crowd seems to want to have it all, which to me is the same anti-exceptions and anti-RTTI crowd, and in that case modules are indeed dead-on-arrival.
I have also weitten and deployed what you’re denigrating as “preprocessor spaghetti code” across the above exact platforms, with a lot of success.
Perhaps we work(ed) at the same company.
One of the design goals of the module proposals is that there is a migration path from pure include to pure modules. The transition must not require a flag day.
In particular a program must be able to handle a mix of modularized libraries and old school libraries for the rest of the eternity (it is not likely that C is going to move to modules anytime soon).
I'm generally disliking the need to maintain separate header and implementation files. Maintaining both is time consuming and putting everything in headers is no panacea, either. Now modules seem to add another type of interface definition to the mix that would need to be maintained after a project adopts modules.