On Wednesday, 16 February 2022 at 19:35:00 UTC, jmh530 wrote:
[snip]

Step 1: In the integral overloads, use allSatisfy!(isSigned, B, E) || allSatisfy!(isUnsigned, T, U) for the current behavior Step 2: When !(allSatisfy!(isSigned, B, E) || allSatisfy!(isUnsigned, T, U)), then convert to narrowest common type as I mentioned (long in your case).

This would preserve the current size when the types are both either signed or unsigned and then would expand it only when there are different signed-ness. This also makes the behavior change at compile-time instead of throwing at runtime.

T/U should be B/E

Reply via email to