#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;
}
