In reply to Etrx91:
A1) the execution order of static variable initializations is undefined. This is why we usually declare static variables as ‘local’ and use a method like get() to initialize it on first use.
A2) Any reference to a parameterized class creates a specialization if one does not already exist.
A3) All references get elaborated at compile time, and all static variables get initialized before time 0.
A4) See A2