Por que um valor de um enum com um tipo subjacente fixo de char resolve para fct (int) em vez de fct (char)?

Esse problema surgiu ao responderesta pergunta sobre resolução de sobrecarga com enums.

Enquanto o caso paralong long foi definitivamente um bug no MSVC2012NovCTP (de acordo com o texto padrão e um teste com o gcc 4.7.1), não consigo descobrir por que o seguinte comportamento ocorre:

#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);
}

Tanto o MSVC2012NovCTP quanto o gcc 4.7.1 concordam com essa saída:

fct (char)
fct (int)

Não deveA ser convertido decharEnum parachar? Por que éA sendo convertido paraint?

EDIT: clang reclama que a chamada é ambígua, o que concorda com a minha interpretação abaixo; Dito isso, eu ainda acharia muito mais intuitivo se fosse considerado apenas o tipo subjacente.

Dois trechos padrão relevantes são §7.2 / 9:

O valor de um enumerador ou um objeto de um tipo de enumeração sem escopo é convertido em um inteiro por promoção integral (4.5)

E §4.5 / 4:

Um prvalor de um tipo de enumeração sem escopo cujo tipo subjacente é fi xo (7.2) pode ser convertido em um prvalor de seu tipo subjacente. Além disso, se a promoção integral puder ser aplicada ao seu tipo subjacente, um valor de um tipo de enumeração sem escopo, cujo tipo subjacente é fi xo, também pode ser convertido em um prvalor do tipo subjacente promovido.

assimcharEnum pode ser convertido parachar, ou qualquer promoção integral dechar, tal comoint.

Mas isso é vago para mim porque "can" não diz exatamente qual será realmente escolhido. Se alguma coisa, isso deve ser ambíguo com esta formulação porque nenhuma preferência é dada entrechar ou qualquer uma das suas promoções. Se você comentarfct(int), então a chamadaé ambíguo. Por que éint especial?

A única coisa em que consigo pensar é que as promoções integrais são aplicadas recursivamente, mas nada que eu veja o ordena.

questionAnswers(2)

yourAnswerToTheQuestion