The example code attached no longer compiles in 1.16. It used to compile in 1.15. Removing the private access modifier from the destructor allows it to compile but then opens up the script to be referenced counted and deleted outside of the desired bounds.
class SomeClass { private static ref SomeClass s_Singleton; private void SomeClass(); private void ~SomeClass(); static void Init() { s_Singleton = new SomeClass(); } static void Destroy() { s_Singleton = null; } static SomeClass Get() { return s_Singleton; } };