Ответ 1
Он имеет мало общего с рангом типа, определенного в 4.13. 4.13. Определенные внутренние ранжирования, используемые для описания интегральных рекламных акций и обычных арифметических преобразований. Они сами по себе непосредственно не влияют на разрешение перегрузки. Рейтинги, относящиеся к разрешению перегрузки, определены в "13.3.3.1.1 Стандартные последовательности преобразования", а затем используются в "13.3.3.2. Оценка неявных последовательностей преобразования".
Итак, речь идет о ранге преобразования, как определено в 13.3. 123456789
- целочисленный литерал типа int
на вашей платформе. Это означает, что вызов обеих версий char
и unsigned long
для вашей функции требует неявного преобразования от int
до char
или от int
до unsigned long
. В обоих случаях мы имеем преобразования типа "интегрального преобразования". Это означает, что в этом случае обе функции одинаково "плохи". Отсюда и двусмысленность.
Если одна из этих функций требовала простого интегрального продвижения (в отличие от интегральной конверсии), она выиграла бы эту резолюцию, и вызов будет считаться однозначным. Но, увы, обе ваши функции требуют целых преобразований.