What does your function return? I tried mixing bool and & and could never avoid error: invalid operands to binary bitwise expression: 'bool' and 'bool'.
Am I expected to cast this to u1 so I can use the bitwise operator to prevent short-circuiting
You are expected to cast to some int type, though it doesn’t really have to do with short-circuiting or not. All the bitwise operations are only defined for integers. As @vulpesx points out, in Zig booleans are expressly only for Boolean logic. This can be a bit unexpected (pardon the pun) but the reasoning is pretty good imo. In Zig I never have to think about truthiness of a type, because only booleans, and optionals (a specialized boolean if you think about it) can be used in logical operations (if, while, etc).