Well, if you were doing this, you would have to replace all uses of normal operator with new operators that stored their information for later use. Like in your example:
(bar > 10 |= 100 &< 200)
would be
(true/false |= 100 ...)
and you wouldn't have any idea what it was applied to. Seems like you are just redefining how the language works.
I have always wanted more mathematical comparisons:
if (2 <= x <= 32)
I wrote a little class to help me do stuff like that, but then the compiler started complaining that I was doing something hideous (because it didn't understand that I had specifically addressed that problem)...
You could have 2 <= x return a variable implicitly convertible to a boolean, but had information about its parameters, then with <= 32 the same thing (or just a direct boolean). Though it wouldn't work if both operands were primitive types :(
For a < b < c I think there is no problem but what disturb me is the use of self assignment operators(|=, &= ,...) which have an assignment semanic which is not present here.
But if you consider this as a DSL in C++ you could assume you don't break operator semantics as you redefine it...