Здравствуйте, MikelSV, Вы писали:
MSV>В то время, когда корабли^W студия собирает проект, g++ упорно придирается к разным моментам.
В то время, когда студия плюёт на стандарт...
MSV>Например:
MSV>MSV>ошибка: нет подходящей функции для вызова ‘EVString::EVString(EVString)’
MSV>замечание: претенденты: EVString::EVString(EVString&)
MSV>замечание: EVString::EVString(VString)
MSV>
MSV>Разобрался, что EVString::EVString(const EVString&) спасает положение. Но с другой стороны это бред, почему я не могу менять данные?
С другой стороны, это бред — почему это тебе надо менять временный объект?
У конструктора копирования могут быть две сигнатуры: T::T(T const&) — используется в подавляющем большинстве случаев, и T::T(T&) — редкое исключение, непонятно когда нужное.
Стандартное приведение rvalue — к
const lvalue, но студия решила, что можно приводить и к неконстантной ссылке.
Заодно, открой для себя mutable — если уж так хочешь что-то менять в константном объекте.
MSV>не получается:
MSV> ошибка: некорректное преобразование из ‘int (*)(int, int)’ в ‘void*’
MSV>А всего то хотелось получить адрес функции.
По стандарту (и по здравому смыслу — если глянуть чуть шире, чем flat модель памяти) указатели на данные и указатели на функции не пересекаются. Верхним типом для данных является void*, верхним типом для функций — void(*)(void).
Хочешь хранить адрес функции — приводи к void(*)(). Хочешь получить численное значение — приводи к intptr_t.
Следующий вопрос будет "хочу получить адрес функции-члена", там тебя поджидает сюрприз: sizeof(void(A::*)()) > sizeof(void(*)()).
MSV>И так далее. В основном ошибки, связанные с переводом из одного типа в другой.
MSV>Долгая отладка таких, казалось бы простых вещей, которые понимает даже студия (2003 года), создают мнение о гцц, как о тупом компиляторе.
MSV>Я так понимаю есть веские основания для всех этих глюков?
Основание одно: стандарт С++. А "даже студия" отягощена плохой наследственностью (как кода компилятора, так и разных существующих библиотек), там хвосты тянутся с достандартных времён ещё.