Why does the most negative int value cause an error about ambiguous function overloads?

This is a very subtle error. What you are seeing is a consequence of there being no negative integer literals in C++. If we look at [lex.icon] we get that a integer-literal, integer-literal         decimal-literal integer-suffixopt         […] can be a decimal-literal, decimal-literal:         nonzero-digit         decimal-literal ’ opt digit where digit is [0-9] and nonzero-digit is [1-9] and … Read more