Очень символично сообщество GNU решило отметить праздник св. Валентина...
Выходом GCC 3.3.3.
Исправлено ощутимое количество багов, в основном Internal compiler errors и ошибки в C++ compiler and library.
>Не пизди раньше времени
>Сановским компилером это тоже не соберётся ... по той же причине
>Есть конструктор string(char), который всё и портит :)
>Догадайся сам, почему
1.
forte не собирает даже такой класс
class A
{
operator int () const;
operator short () const;
};
там никаких string'ов не надо.
2. В моем коде конструтор для стринга вызывался один раз, так что или поучи c++ и stl, лоровский пустобрех.
Вот уж хуй аврора крейсер, я могу делать столько операторов привидения типов, сколько хочу. И мы уклонились от темы gcc в сторону forte, у сановского компилера полно своих заморочек.
>Ну несколько непонятно почему надо оставлять только один оператор приведения? Или это уже в стандарте описано?
Ты прикидываешься ?
Один оператор надо, чтобы до тебя быстрее дошло
Не хамил бы, получил бы полный ответ, а так - сам докумекивай, причем здесь ещё одни конструктор
Как я и говорил ни один пиздобол с лора не смог объяснить почему собирается код gcc 3.2.x и не собирается 3.3.x. Какой-то анонист несет чушь про констурторы у std::basic_string'а, предлагает выкинуть нахуй операторы приведения типов и оставить один и т.п.
На самом деле все намного проще, серия 3.3.х более точно держит стандарт.
Присваивание значения типа V объекту класса X допустимо в том случае, если имеется оператор присваиваения X::operator = (Z) такой, что V является Z или существует ЕДИНСТВЕЕНОЕ преобразование из V в Z. В данном случае у класса basic_string существует 3 оператора присваивания для std::string, _CharT *, и _CharT. std::string параметризует basic_string обыкновынным char'ом, поэтому наш класс одновременно удволетворяет двум операторам = класса basic_string.
Так что идите учитесь, тов. мнимые программисты на c++.
PS: Sun Forte Developer вообще хуево держит стандарты, и про него разговор особый.
>предлагает выкинуть нахуй операторы приведения типов и оставить один и т.п.
Отсоси, блядь, предлагал убрать только для примера, ублюдок,
а то, что ты здесь понаписал, компилер и так в мессагах выдёт,
хуй знает, только зачем ты спрашивал
> "Присваивание значения типа V объекту класса X допустимо в том случае, если имеется оператор присваиваения X::operator = (Z) такой, что V является Z или существует ЕДИНСТВЕЕНОЕ преобразование из V в Z. В данном случае у класса basic_string существует 3 оператора присваивания для std::string, _CharT *, и _CharT. std::string параметризует basic_string обыкновынным char'ом, поэтому наш класс одновременно удволетворяет двум операторам = класса basic_string."
Это всё верно, но де там оператор преобразования из A в char или char* объявлен? Я его что-то в описании класса не вижу совсем.
>хуй знает, только зачем ты спрашивал
чтобы показать, что лохи, которые тут обсуждают компиляторы ничего кроме чужих прог ими не собирали, и не знают сколько крови вложено в портирование на forte gcc 3.x.x, ACC. Ну типа тебя, короче.
>У меня железом всё ОК. Я не занимаюсь разгоном, не испорльзую VIA/AMD/SIS. Блок питиания у меня серверный за 80 баксов 450Вт. Явный брак в железе я в состоянии продиангностировать в течении дня посе покупки. Эта машина постоянно занимается кодированием видео. Сутками кодирует, никаих сигфолтов.
>lenin (*) (16.02.2004 20:23:47)
владимир ильич, батенька, нужно быть последовательным. зачем вы эмулируете какую-то поделку на zilog-e. интел так интел. даешь эмулятор радио-86рк с его i8080. ^)
> Ну дык срабатывает преобразование интегральных типов к char
Мне сейчас неохота лезть искать в стандарте, но там, как я помню, есть ещё одно правило, что при преобразовании типа параметра к имеющейся сигнатуре ф-ии (в том числе и перегруженного оператора) не может использоваться более одного implicit либо user-defined преобразования типа. Так что в данном случае должно работать только преобразование в std::string и код совершенно правильный. Если я ошибаюсь насчёт стандарта, то поправьте.
> Так что в данном случае должно работать только преобразование в std::string и код совершенно правильный.
Нет. У класса basic_string определены сразу несколько операторов присваивания для которых одновременно подходят несколько операторов преобразования типов и с точки зрения компилятора все они равнозначны. Вот если бы был определен оператор присваивания класса А, то однозначности бы не возникло бы. А так нужно пользоваться явным приведением типа, например:
Test = static_cast<std::string>( a );
Так что оба грубых ананимуса правы :) К чему это только они написали? Это совершенно не говорит о том, что gcc3.3 нестабилен... Наоборот хорошо, что он более строго стал соблюдать стандарты...
Собрал полностью Линукс с нуля с помощью GCC-3.3.1 - все работает отлично собирал с ключами:
CFLAGS='-march=pentium4 -mcpu=pentium4 -O3 -mpfmath=sse -msse2 -pipe'
CXXFLAGS='-march=pentium4 -mcpu=pentium4 -O3 -mpfmath=sse -msse2 -pipe'
Конфа ноута:
Pentium-M 1500Ghz, 512Mb, 40Gb, ATI9000 64Mb, SXGA+.
Ну я честно сказать - не знаю как это назвать, можть везенье? Или фиг его знает? Кто можть подскажет, а? :)
если чаво мыльте: ruslan@iru.ru