Здравствуйте, MikelSV, Вы писали:
MSV>Здравствуйте, wander, Вы писали:
MSV>>>но за такие дела я смотрю на компилятор как на врага.
W>>Смотрите лучше так на того, кто это писал.
MSV>Не хочу так смотреть на себя.
MSV>>>Стандарты как минимум ограничивают фантазию.
W>>Стандарты обеспечивают порядок. И не вина GCC, что MSVC выбрал путь анархии.
MSV>Не чувствую, что сохранение порядка главная причина.
MSV>Программа запускается, но это сохранение порядка толкает на создание кривого кода.
Верите вы или нет, но качество кода в первую очередь зависит от того как именно написана программа. Если в программе постоянно используются такого рода хаки (как с конст_каст например в примере выше), то рано или поздно это случится (вылет). И не важно что у вас за компилятор. Поэтому я и говорю — когда возникают такого рода проблемы — нужно пересматривать дизайн.
MSV>Проблема все с теми же:
MSV> ошибка: вызов перегруженной ‘MString(HLString&)’ имеет неоднозначную трактовку
MSV> претенденты: MString::MString(const VString&)
MSV> MString::MString(const MString&)
MSV> MString::MString(unsigned int) <near match>
MSV> ...
MSV>HLString : public LString
MSV>в LString есть operator MString().
MSV>---
MSV>теперь вызывается с (MString&)lsret; но это как вы можете увидеть явный вылет, зато гцц не ругается.
MSV>operator MString() -> MString& -> неверный указатель на память.
Покажите хотя бы кусок цельного кода. Так не ясно что вы пытаетесь сотворить.
MSV>Вызов при котором даже в студия вылетает, что естественно:
MSV>Drawn((MString&)(HLString()+"Uncnown command '"+comm+"'\r\n\r\n"));
Покажите как operator+ реализован.