В Windows ваше приложение по умолчанию построено для 32 бит.В OSX и Linux (это то, что запускает run.dlang.io), он собирается по умолчанию для 64-битных.
Из-за этого индексы массива имеют значения uint и ulong соответственно.В вашем коде вы использовали Tuple!(ulong, double)
, но в 32-битном он вызывается с индексами uint.
Вместо ulong / uint вы должны использовать size_t
для индексов, которые отображаются в uint / ulong.Это определено в object.d , который включен по умолчанию.
Так что если вы измените свою функцию на
static bool even(Tuple!(size_t, double) a) {
return (a[0] & 1) == 0;
}
, она будет работать как на 32-битной, так и на64 бит.
В Windows вы также можете протестировать свой код с помощью dub, запустив его с --arch=x86_64
или с флагом dmd -m64
, где он уже должен работать без изменений.Я рекомендую всегда тестировать ваше приложение как на 32-битном, так и на 64-битном, чтобы убедиться, что вы используете size_t
там, где это необходимо.