The argument is passed by value, so promotion shouldn't change the result. Except maybe for `ulong` on a 32 bit build). For every other type, `return value ? bsf(value) : 0;` should be just as good...?