> Is there anything specifically wrong with the second implementation that I posted?
This pointer Singleton * Singleton::Instance = nullptr; is never set to point to an actual object,
Asssuming that that is fixed (at the point of definition: avoiding the order of initialisation fiasco. In the function getInstance() when it is called for the first time: avoiding race conditions)
The class Singleton is copyable; so its singleton-ness is not enforced.
The singleton object needs to be destroyed when the program ends; if it is an object with a dynamic storage duration, it needs to be wrapped in a unique pointer.
Ideally, Singleton::getInstance() should return a reference to the object (ownership is not transferred to the caller and an object is always available).