implicit casting
От: jyuyjiyuijyu  
Дата: 30.07.11 14:09
Оценка:
Всем привет
вопрос почему тут разрешается двойной неявный кастинг
ATL::CStringA A;
ATL::CStringW W(A);

вначале вызывается operator для CStringA
ATL::CStringA::operator PCSTR() const throw()

а потом конструктор CStringW
ATL::CStringW::CStringW( _In_opt_z_ const CHAR* pszSrc )

немного изменив код
ATL::CStringW f()
{
    ATL::CStringA A;
    return A;
}

тут как я понимаю он теже действия должен сделать но
выдет warning C4927: illegal conversion; more than one user-defined conversion has been implicitly applied
а почему тогда первый код нормально компилирует а тут ему уже не нравится двойной кастинг ?
третий прмиер
void g(ATL::CStringW W)
{
}
ATL::CStringA A;
g(A);

тут вообще отказывается компилировать "без комментариев"
error C2664: 'g' : cannot convert parameter 1 from 'ATL::CStringA' to 'ATL::CStringW'
чем эти прмеры принципиально отличаются ? почему такой разброс ошибок на одинаковом коде ?
компилер cl.exe 15.0
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.