#include <iostream>
using namespace std;
class Test
{
public:
Test(bool condition) : condition(condition)
{
if(condition)
{
std::cout << "if(condition) special init needs" << std::endl;
}
}
~Test()
{
if(condition)
{
std::cout << "if(condition) special cleanup needs" << std::endl;
}
}
operator bool() { return condition; }
private:
bool condition = false;
};
#define DoIf(cond) if(Test DoIf_test = Test(cond))
int main()
{
std::cout << "Start of main" << std::endl;
DoIf(true)
{
std::cout << "Inside condition A" << std::endl;
}
DoIf(false)
{
std::cout << "Inside condition B" << std::endl;
}
std::cout << "End of main" << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgVGVzdAp7CglwdWJsaWM6CglUZXN0KGJvb2wgY29uZGl0aW9uKSA6IGNvbmRpdGlvbihjb25kaXRpb24pCgl7CgkJaWYoY29uZGl0aW9uKQoJCXsKCQkJc3RkOjpjb3V0IDw8ICJpZihjb25kaXRpb24pIHNwZWNpYWwgaW5pdCBuZWVkcyIgPDwgc3RkOjplbmRsOwoJCX0KCX0KCQoJflRlc3QoKQoJewoJCWlmKGNvbmRpdGlvbikKCQl7CgkJCXN0ZDo6Y291dCA8PCAiaWYoY29uZGl0aW9uKSBzcGVjaWFsIGNsZWFudXAgbmVlZHMiIDw8IHN0ZDo6ZW5kbDsKCQl9Cgl9CgkKCW9wZXJhdG9yIGJvb2woKSB7IHJldHVybiBjb25kaXRpb247IH0KCQoJcHJpdmF0ZToKCWJvb2wgY29uZGl0aW9uID0gZmFsc2U7Cn07CgojZGVmaW5lIERvSWYoY29uZCkgaWYoVGVzdCBEb0lmX3Rlc3QgPSBUZXN0KGNvbmQpKQoKaW50IG1haW4oKQp7CglzdGQ6OmNvdXQgPDwgIlN0YXJ0IG9mIG1haW4iIDw8IHN0ZDo6ZW5kbDsKCQoJRG9JZih0cnVlKQoJewoJCXN0ZDo6Y291dCA8PCAiSW5zaWRlIGNvbmRpdGlvbiBBIiA8PCBzdGQ6OmVuZGw7CQoJfQoJCglEb0lmKGZhbHNlKQoJewoJCXN0ZDo6Y291dCA8PCAiSW5zaWRlIGNvbmRpdGlvbiBCIiA8PCBzdGQ6OmVuZGw7CQoJfQoJCglzdGQ6OmNvdXQgPDwgIkVuZCBvZiBtYWluIiA8PCBzdGQ6OmVuZGw7CQoJCglyZXR1cm4gMDsKfQ==