URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [testsuite/] [g++.old-deja/] [g++.other/] [singleton.C] - Rev 305
Compare with Previous | Blame | View Log
// { 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 (...) { }
}
}