ambiguidade de sobrecarga do operador de conversão, compiladores diferem
Eu já vi outras perguntas sobre SO sobre isso, mas nenhuma que explique isso na íntegra. O que écerto maneiras de os compiladores lidarem com as duas situações abaixo? Eu tentei com gcc 4.7.1 (com -std = c ++ 0x), VS2010 e VS2012 obter resultados diferentes em todos:
Exemplo 1:
struct BB
{
// generic cast
template<typename T>
operator T() const
{
return 0;
}
// string cast
operator std::string() const
{
return string("hello");
}
};
int main()
{
BB b;
string s = b;
}
Saída:
gcc 4.7.1: OkVS2010: OkVS2012: Falha: "Não é possível converter de BB para string"Exemplo 2:
struct BB
{
// generic cast
template<typename T>
operator T() const
{
return 0;
}
// string cast
operator std::string() const
{
return string("hello");
}
};
int main()
{
BB b;
string s = (string)b;
Saída:
gcc 4.7.1: Falha: a chamada de string sobrecarregada (BB &) é ambíguaVS2010: OkVS2012: Falha: "Não é possível converter de BB para string"