Ambiguous overload for 'operator='
От: Trapper  
Дата: 18.09.07 16:10
Оценка:
Всем привет.
Есть такой код, который не компилиться на 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.

Буду признателен за объяснения и/или помощь в том, как заставить компилиться этот код.
Trapper
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.