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.
[edit] This may have changed in C++11 or may just be a C thing.
The question it is marked as a duplicate to has an answer which links to another answer, both of which state that the behavior is well defined in C++11 but not C++03, and it's completely illegal in C.