Can anyone please explain this code:

for_each( setFinalVal.begin(), setFinalVal.end(),
        ( cout<<_1<<" ", if_(_1 < 24.000001 && _1 > 23.999999)[ cout <<"Bingo:<"<< _1<<">"])  );

where setFinalVal is defined as set<double>.

I expect it to result in:

-32 -24 -16 -12 -11 -10 -9 -8 -7 -5 -4 -3 -2 0 4 5 6 7 8 9 11 12 13 14 24 Bingo:<24>32 40

However, compiled with VC++2005 express, it results in:

Bingo:<-32 -24 -16 -12 -11 -10 -9 -8 -7 -5 -4 -3 -2 0 4 5 6 7 8 9 11 12 13 14 24 24>32 40

Why?