There are no mainstream 16-bit int platforms. It's fine to know what you target.
The promotions that are really surprising are from uint64_t bitfields to int (because it's based on value representability).
struct {
uint64_t a : 33,
b : 15;
} s;
// s.b gets "promoted" to int, s.a does not