// { dg-do run  }
// This tests two things:
// 1. there is an annoying warning.
// singleton.C:26: warning: `class singleton' only defines private constructors and has no friends
// egcs fails to see that there is a public static accessor function.
// 2. the program crashes, because apparently the static variable s in
// singleton::instance() is considered constructed although the ctor
// exited via an exception. (crash changed to nonzero return here)

class singleton {
public:
       static singleton& instance() {
               static singleton s;
               return s;
       }
       int check() {return initialized;}

private:
       singleton() : initialized(1) {
               if ( counter++ == 0 ) throw "just for the heck of it";
               initialized = 2;
       }
       singleton( const singleton& rhs );
       void operator=( const singleton& rhs );
       int initialized;
       static int counter;
};  

int singleton::counter;

int main()
{
       while (1) {
               try {
                       return singleton::instance().check()-2;
               } catch (...) { }
       }
}

