Всем привет
вопрос почему тут разрешается двойной неявный кастинг
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