Creating my own flow control statements in C++. Is that acceptable?
Lisp has an uniform syntax, so it’s possible to create user defined flow control constructs that look exactly like the built in constructs. In C++, that’s generally not possible.

Your code is certainly clever, and it solves the problem of omitted breaks (I consider the other drawbacks you list less important). However:


Despite naming this a “switch”, you’ve essentially recreated an if-else chain. Notably, a compiler may have a bit more difficulty optimizing this than a traditional switch.
Your implementation does not seem to support range comparisons or a default case, although both of these seem to be doable in your conceptual framework.
When used in a disciplined way, falling through from one switch case to the next is not always devoid of merit.
I’m not sure that returning this boolean has a great benefit. It might be preferable to design a construct that ensures that one of the cases is always executed.
Be honest: do you really find this more readable than a traditional switch statement?