>>706
私なら template 使って書くかな。

template <typename T>
class Singleton
{
  static bool m_IsAlive;
protected:
  Singleton()
  {
    assert(!m_IsAlive);
    m_IsAlive = true;
  }
  ~Singleton()
  {
    assert(m_IsAlive);
    m_IsAlive = false;
  }
};

template <typename T> bool Singleton <T>::m_IsAlive = false;

template <typename T>
class A : public Singleton<T>
{};

class B : public A<B>
{};