The Language Reference is not completely clear on use of noDefaultConstructor. It took me a while to sort out that it needs to follow the open statements. Perhaps the LR could be clarified on the next iteration of VIP.
class graphParms :graphParmsopen core
open vpiDomains
[noDefaultConstructor]% <== Must follow 'open' statementsconstructors
new :( string GraphTypeID).
new_fromFile :( string QFN).
But in reality it clearly is not sufficient. Maybe you could assist with suggesting what (in some details) you think would have helped you. (E.g. a better formulation; another location to write about it; explicit examples).
Example
class classWithoutPublicConstructors : myInterface
[noDefaultConstructor]
...
end class classWithoutPublicConstructors
In that example, the close spacing between the class declaration and [noDefaultContructor] led me to believe that [noDefaultConstructor] should immediately follow the declaration.
I did not think to search for Insertion Points ... actually, I had never read that until now! (oops!)
Perhaps modifying the example to read somewhat like the following would help:
Example
class classWithoutPublicConstructors : myInterface open core
[noDefaultConstructor]
...
end class classWithoutPublicConstructors
You are too hard on the people who compiled the excellent on-line reference material -- it is hard for experts to anticipate all the possible misinterpretations made by amateurs!