#include <iostream>
#include <string>
#include <cstdlib>
// Some preparation
class die
{
public:
die(const char *message) : m_message(message) {}
const char *message() const { return m_message; }
private:
const char *m_message;
};
template <class T> T operator ||(const T &t, const die &d)
{
if (t)
return t;
std::cerr << d.message() << std::endl;
exit(1);
}
// And now some fun
class Test { };
int badFunction() { return 0; }
int main()
{
Test *p = new Test() || die("Can't allocate object");
int x = badFunction() || die("0 returned");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y3N0ZGxpYj4KCi8vIFNvbWUgcHJlcGFyYXRpb24KCmNsYXNzIGRpZQp7CnB1YmxpYzoKICAgIGRpZShjb25zdCBjaGFyICptZXNzYWdlKSA6IG1fbWVzc2FnZShtZXNzYWdlKSB7fQogICAgY29uc3QgY2hhciAqbWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZTsgfQpwcml2YXRlOgogICAgY29uc3QgY2hhciAqbV9tZXNzYWdlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+IFQgb3BlcmF0b3IgfHwoY29uc3QgVCAmdCwgY29uc3QgZGllICZkKQp7CiAgICBpZiAodCkKICAgICAgICByZXR1cm4gdDsKICAgIHN0ZDo6Y2VyciA8PCBkLm1lc3NhZ2UoKSA8PCBzdGQ6OmVuZGw7CiAgICBleGl0KDEpOwp9CgovLyBBbmQgbm93IHNvbWUgZnVuCgpjbGFzcyBUZXN0IHsgfTsKCmludCBiYWRGdW5jdGlvbigpIHsgcmV0dXJuIDA7IH0KCmludCBtYWluKCkKewogICAgVGVzdCAqcCA9IG5ldyBUZXN0KCkgfHwgZGllKCJDYW4ndCBhbGxvY2F0ZSBvYmplY3QiKTsKICAgIGludCB4ID0gYmFkRnVuY3Rpb24oKSB8fCBkaWUoIjAgcmV0dXJuZWQiKTsKICAgIHJldHVybiAwOwp9Cg==