неоднозначность перегрузки оператора преобразования, разные компиляторы
Я видел другие вопросы по SO, касающиеся этого, но ни один, который объясняет это полностью. Чтоправо способы для компиляторов справиться с двумя ситуациями ниже? Я пробовал это с gcc 4.7.1 (с -std = c ++ 0x), VS2010 и VS2012 получить разные результаты на всех:
Пример 1:
struct BB
{
// generic cast
template
operator T() const
{
return 0;
}
// string cast
operator std::string() const
{
return string("hello");
}
};
int main()
{
BB b;
string s = b;
}
Выход:
gcc 4.7.1: хорошоVS2010: хорошоVS2012: Fail: "Невозможно преобразовать из BB в строку "Пример 2:
struct BB
{
// generic cast
template
operator T() const
{
return 0;
}
// string cast
operator std::string() const
{
return string("hello");
}
};
int main()
{
BB b;
string s = (string)b;
Выход:
gcc 4.7.1: Fail: вызов перегруженной строки (BB &) неоднозначноVS2010: хорошоVS2012: Fail: "Невозможно преобразовать из BB в строку "