Всем привет.
Есть такой код, который не компилиться на gcc 4.1 и на comeau (на студии VS 7.1 всё собирается замечательно):
#include <string>
struct test_struct
{
operator bool () {return false;}
operator std::string () {return "";}
};
int main ()
{
std::string s;
test_struct test;
s = test; // вот здесь возникает ошибка
}
comeau пишет следующее:
line 13: error: more than one operator "=" matches these operands:
function "std::basic_string<_CharT, _Traits,
_Alloc>::operator=(const std::basic_string<_CharT,
_Traits, _Alloc> &) [with _CharT=char,
_Traits=std::char_traits<char>,
_Alloc=std::allocator<char>]"
function "std::basic_string<_CharT, _Traits,
_Alloc>::operator=(_CharT) [with _CharT=char,
_Traits=std::char_traits<char>,
_Alloc=std::allocator<char>]"
operand types are: std::string = test_struct
Я не понимаю, откуда вдруг возникла неоднозначность? Есть специально для std::string оператор преобразования. Оператор преобразования к bool хуже, т.к. для него подбирается operator=(char), а char и bool не одно и тоже. По идее должен был выбраться оператор преобразования к std::string.
Буду признателен за объяснения и/или помощь в том, как заставить компилиться этот код.