Listing 2

 ...
class Log {
public:
  Log() { echo("Log c'tor"); }
  ~Log() { echo("Log d'tor"); }
  void echo(const char *s) { cout << s << endl; }
};
typedef SingletonHolder<
  Log, CreateUsingNew, PhoenixSingleton
> log;
class Example {
public:
  Example() { echo("Example c'tor"); }
  ~Example() {
    echo("Example d'tor starting");
    log::Instance().echo("Log: inside Example d'tor");
    echo("Example d'tor finished");
  }
  void echo(const char *s) { cout << s << endl; }
};
int main(int argc, char* argv[])
{
  Example *example = new Example();
  SetLongevity(
    example, 1, &Loki::Private::Deleter<Example>::Delete
  );
  log::Instance().echo("Log now instantiated.");
  return 0;
}