Strictly speaking, it's undefined because "a &= b && 10" is not an r-value so it can't be assigned to a variable. It does work on my gcc, and if I don't pass -Wall then it doesn't even give a warning, but you should bare in mind that it's not correct and isn't guaranteed to work on any compiler. In fact, if you enable optimisations, the compiler might just remove it -- compilers will often silently remove code that relies on undefined behaviour because the standard says a correct program will never contain undefined behaviour.
I can't quote the standard, but if you pass -Wall to gcc it will say "operation [...] may be undefined". I'm fairly sure it's undefined behaviour but I may be wrong. I thought compound assignments couldn't strictly be used as r-values.
 This may have changed in C++11 or may just be a C thing.