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

.
Drawn((MString)(HLString()+"Uncnown command '"+comm+"'\r\n\r\n"));
Чем здесь можно помочь компилятору?
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?