а еще тебе нужны конвертации между ними, например WeirdRange<7,9> должно автоматически работать везде где ожидается WeirdRange<8,9> в качестве параметра и WeirdRange<0,11> в качестве результата
а еще тебе нужны конвертации между ними, например WeirdRange<7,9> должно автоматически работать везде где ожидается WeirdRange<8,9> в качестве параметра и WeirdRange<0,11> в качестве результата
а с какими-то волшебными типами и теми множествами описанных тобой условий есть какая-то автоконвертация на основе пересечения условий?
а так comptime fn DumbCheckedType(innerStorageType: type, check: fn(data: innerStorageType) bool) type, и для любых условий ты используешь этот тип и запихиваешь в него функцию проверки с любым количеством условий