#include <iostream>
struct FirstWillThrow {
static bool first_time;
FirstWillThrow() {
if (first_time) {
std::cout << "FirstWillThrow the first time" << std::endl;
first_time = false;
throw 0;
}
std::cout << "FirstWillThrow all other times" << std::endl;
}
};
bool FirstWillThrow::first_time = true;
void foo(bool flag) {
std::cout << "foo" << std::endl;
if(flag) {
static FirstWillThrow fwt;
}
}
int main(void) {
foo(false);
try {
foo(true);
} catch(...) {
}
foo(true);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEZpcnN0V2lsbFRocm93IHsKCXN0YXRpYyBib29sIGZpcnN0X3RpbWU7CgkKCUZpcnN0V2lsbFRocm93KCkgewoJICBpZiAoZmlyc3RfdGltZSkgewoJICAJc3RkOjpjb3V0IDw8ICJGaXJzdFdpbGxUaHJvdyB0aGUgZmlyc3QgdGltZSIgPDwgc3RkOjplbmRsOwoJICAJZmlyc3RfdGltZSA9IGZhbHNlOwoJICAJdGhyb3cgMDsKCSAgfQoJICBzdGQ6OmNvdXQgPDwgIkZpcnN0V2lsbFRocm93IGFsbCBvdGhlciB0aW1lcyIgPDwgc3RkOjplbmRsOwoJfQp9OwoKYm9vbCBGaXJzdFdpbGxUaHJvdzo6Zmlyc3RfdGltZSA9IHRydWU7Cgp2b2lkIGZvbyhib29sIGZsYWcpIHsKCXN0ZDo6Y291dCA8PCAiZm9vIiA8PCBzdGQ6OmVuZGw7CgkKCWlmKGZsYWcpIHsKCQlzdGF0aWMgRmlyc3RXaWxsVGhyb3cgZnd0OwoJfQp9CgppbnQgbWFpbih2b2lkKSB7Cglmb28oZmFsc2UpOwoJCgl0cnkgewoJCWZvbyh0cnVlKTsKCX0gY2F0Y2goLi4uKSB7CgkJCgl9CgkKCWZvbyh0cnVlKTsKCXJldHVybiAwOwp9Cg==