#include <iostream>
using namespace std;
struct A
{
bool bValid;
int value;
bool isValid() { return bValid; }
A(bool b = false) : bValid(b) {}
A(int v) : bValid(true), value(v) {}
operator bool() const
{
return bValid;
}
};
A foo()
{
return 5;
}
A bar()
{
return false;
}
int main() {
if (auto a = foo())
{
cout<<"a = "<<a.value<<"\n";
}
else
{
cout<<"a is not valid\n";
}
if (auto b = bar())
{
cout<<"b = "<<b.value<<"\n";
}
else
{
cout<<"b is not valid\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCnN0cnVjdCBBCnsKCWJvb2wgYlZhbGlkOwoJaW50ICB2YWx1ZTsKCWJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuIGJWYWxpZDsgfQoJCglBKGJvb2wgYiA9IGZhbHNlKSA6IGJWYWxpZChiKSB7fQoJQShpbnQgdikgOiBiVmFsaWQodHJ1ZSksIHZhbHVlKHYpICB7fSAKCQoJb3BlcmF0b3IgYm9vbCgpIGNvbnN0Cgl7CgkJcmV0dXJuIGJWYWxpZDsKCX0KCn07CgpBIGZvbygpCnsKICAgIHJldHVybiA1OwkKfQoKQSBiYXIoKQp7CglyZXR1cm4gZmFsc2U7Cn0KCmludCBtYWluKCkgewoKCWlmIChhdXRvIGEgPSBmb28oKSkKCXsKCQljb3V0PDwiYSA9ICI8PGEudmFsdWU8PCJcbiI7Cgl9CgllbHNlCgl7CgkJY291dDw8ImEgaXMgbm90IHZhbGlkXG4iOwoJfQoKCWlmIChhdXRvIGIgPSBiYXIoKSkKCXsKCQljb3V0PDwiYiA9ICI8PGIudmFsdWU8PCJcbiI7Cgl9CgllbHNlCgl7CgkJY291dDw8ImIgaXMgbm90IHZhbGlkXG4iOwoJfQoJCglyZXR1cm4gMDsKfQ==