Listing 5

template
<
  class T,
  template <class> class CreationPolicy,
  template <class> class L,
  template <class> class M
>
void SingletonHolder<T, CreationPolicy, L, M>::DestroySingleton()
{
  assert(!destroyed_);
  CreationPolicy<T>::Destroy(pInstance_);
  pInstance_ = 0;
  destroyed_ = true;
}