niejednoznaczność przeładowania operatora konwersji, kompilatory różnią się
Widziałem inne pytania dotyczące SO w tej sprawie, ale żadna nie wyjaśnia tego w pełni. Co to jestdobrze sposoby dla kompilatorów na radzenie sobie z dwiema sytuacjami poniżej? Próbowałem go z gcc 4.7.1 (z -std = c ++ 0x), VS2010 i VS2012, uzyskując różne wyniki na wszystkich:
Przykład 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;
}
Wydajność:
gcc 4.7.1: OkVS2010: OkVS2012: Niepowodzenie: „Nie można przekonwertować z BB na ciąg”Przykład 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;
Wydajność:
gcc 4.7.1: Niepowodzenie: wywołanie przeciążonego ciągu (BB i) jest nietypoweVS2010: OkVS2012: Niepowodzenie: „Nie można przekonwertować z BB na ciąg”