In 6.3 Conversions, the integer conversion rank for signed integer types is defined as proportional with the precision.
The rank of a signed integer type shall be greater than the rank of any signed integer type with less precision. C11 §6.3.1.1 1
After that, it says,
The rank of
long long intshall be greater than the rank oflong int, which shall be greater than the rank ofint, which shall be greater than the rank ofshort int, which shall be greater than ... etc
So, this is ambiguous. Because the precision of int can be equal either to the precision of long or equal to the precision of short, depending on the implementation of int.
The precision of int may either be that one of long or short (definition in <limits.h>). On the other hand it says that rank(int) < rank (short), even if in <limits.h> they may be the same.
Where is the ambiguity in all this stuff?