int Ac = 0, Ad = 0;
struct A
{
A(bool b)
: b (b)
{ Ac++; }
operator bool() { return b; }
~A() { Ad++; }
bool b;
};
int main()
{
for (int i = 0; i < 2; i++)
{
if (A a = (i == 0))
{
bool b = a;
if (! b) return 1;
if (i != 0) return 1;
if (Ac != (Ad + 1)) return 1;
} else
{
bool b = a;
if (b) return 1;
if (i == 0) return 1;
if (Ac != (Ad + 1)) return 1;
}
if (! (Ac == (2*i + 1) && Ad == (2*i + 1))) return 1;
if (A a = (i != 0))
{
bool b = a;
if (! b) return 1;
if (i == 0) return 1;
if (Ac != (Ad + 1)) return 1;
} else
{
bool b = a;
if (b) return 1;
if (i != 0) return 1;
if (Ac != (Ad + 1)) return 1;
}
if (! (Ac == (2*i + 2) && Ad == (2*i + 2))) return 1;
int a = 0;
}
return 0;
}