Почему значение перечисления с фиксированным базовым типом char разрешается в fct (int) вместо fct (char)?

Эта проблема возникла при ответеэтот вопрос о разрешении перегрузки с перечислениями.

Пока дело заlong long определенно была ошибка в MSVC2012NovCTP (согласно стандартному тексту и тесту с gcc 4.7.1), я не могу понять, почему происходит следующее поведение:

#include <iostream>

enum charEnum : char { A = 'A' };

void fct(char)      { std::cout << "fct(char)"      << std::endl; }
void fct(int)       { std::cout << "fct(int)"       << std::endl; }
void fct(long long) { std::cout << "fct(long long)" << std::endl; }

int main() 
{
    fct('A');
    fct(A);
}

И MSVC2012NovCTP, и gcc 4.7.1 согласны с этим выводом:

ПКТ (символ)
ГЦТ (целое)

не должныA быть преобразованным изcharEnum вchar? ПочемуA превращается вint?

РЕДАКТИРОВАТЬ: Clang жалуется, что вызов является неоднозначным, что согласуется с моим толкованием ниже; Тем не менее, я все равно нашел бы это гораздо более интуитивно понятным, если бы он считался только базовым типом.

Два соответствующих стандартных выдержки - §7.2 / 9:

Значение перечислителя или объекта типа перечисления с незаданной областью преобразуется в целое число путем интегрального преобразования (4.5).

И §4.5 / 4:

Значение типа перечисления с незаданной областью, базовый тип которого фиксирован (7.2), может быть преобразовано в значение базового типа. Более того, если интегральное продвижение может быть применено к его базовому типу, prvalue типа перечисления с незаданной областью, базовый тип которого фиксирован, также может быть преобразовано в prvalue повышенного базового типа.

ТакcharEnum может быть преобразован вcharили любое интегральное продвижениеchar, такие какint.

Но для меня это расплывчато, потому что «может» не совсем говорит, какой из них будет выбран. Во всяком случае, это должно быть двусмысленным с этой формулировкой, потому что междуchar или любое из его акций. Если вы закомментируетеfct(int)тогда звонокявляется неоднозначный. Почемуint особый?

Единственное, о чем я могу думать, это то, что интегральные продвижения применяются рекурсивно, но ничего, что я вижу, не требует этого.

Ответы на вопрос(2)

Ваш ответ на вопрос