Gale Paeper wrote:
Instead of special syntax and compiler options, I thinking some sort of predefined abstract root object type for each of the four object models which establishes and fixes the model characteristics of the object inheritance tree rooted on the respective predefined object model type might be the better way to handle supporting the different object models.
I do not think so. The models have almost the same semantics (at least at low level), the differences are in syntax. More precisely, you can do essentially the same thing using any of the models, but you write them in different ways. "Inheriting" syntax would make programs much less readible: you would be forced to find root object to know what a given construct means (well, I typically have to look at the whole inheritance hierarchy to understand the code, but at least syntax does not change in unexpexted ways). My point is that it adds really silly non-local dependency to the code: if you chage root object than the changes propagate down the inheritance chains forcing re-writes for no good reason.
Note that the situation changes once we have support for binary incompatible object models. Then it makes sense for root object to fix the model (ABI). But IMHO not for syntax.