#include <iostream>
using namespace std;
template<class T>
void start_block(const char* str, T f)
{
cout<<"start: "<<str<<endl;
f();
cout<<"end: "<<str<<endl;
}
#define BLOCK(x) start_block(x,[&]
int main()
{
BLOCK("Program started")
{
if (1) BLOCK("if (1)")
{
cout << "Starting loop now\n";
for (int i = 0; i < 3; i++) BLOCK("Iteration")
{
cout << "Executing iteration " << i << "\n";
});
cout <<"Condition execution complete\n";
});
});
return 0;
}
CgojaW5jbHVkZSA8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKdGVtcGxhdGU8Y2xhc3MgVD4Kdm9pZCBzdGFydF9ibG9jayhjb25zdCBjaGFyKiBzdHIsIFQgZikKewoJY291dDw8InN0YXJ0OiAiPDxzdHI8PGVuZGw7CglmKCk7Cgljb3V0PDwiZW5kOiAiPDxzdHI8PGVuZGw7Cn0KI2RlZmluZSBCTE9DSyh4KQlzdGFydF9ibG9jayh4LFsmXQoKaW50IG1haW4oKQp7CgkKCUJMT0NLKCJQcm9ncmFtIHN0YXJ0ZWQiKQoJewoJCWlmICgxKSAJQkxPQ0soImlmICgxKSIpCgkJewoJCQkJY291dCA8PCAiU3RhcnRpbmcgbG9vcCBub3dcbiI7CgoJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspCUJMT0NLKCJJdGVyYXRpb24iKQoJCQkJewoJCQkJCQljb3V0IDw8ICJFeGVjdXRpbmcgaXRlcmF0aW9uICIgPDwgaSA8PCAiXG4iOwoJCQkJfSk7CgoJCQkJY291dCA8PCJDb25kaXRpb24gZXhlY3V0aW9uIGNvbXBsZXRlXG4iOwoJCX0pOwoJfSk7CgoJcmV0dXJuIDA7Cn0KCg==