This is what The Rust Reference has to say about usize :

usize and isize have a size big enough to contain every address on the target platform. For example, on a 32 bit target, this is 4 bytes and on a 64 bit target, this is 8 bytes.

Note that the phrasing doesn't exclude sizes other than 4 bytes or 8 bytes. Indeed, Rust already supports a platform with 16-bit usize : msp430-none-elf (the MSP430 is a 16-bit microcontroller).

If you want to perform conditional compilation based on the size of pointers, you can use the target_pointer_width configuration option. Here's a sample usage from the core library: