gen_t is better.  Also, negative gen_t and negative shard_t have no meaning, should be uint64_t, uint8_t.  The special gen_t value can be uin64 max and the special shard_t can be uint8_t max.