0xd34df00d 13.05.2011 17:36 Azoth_primary

Какого хуя gcc не предупреждает здесь? Ведь это же UB:
struct T
{
T& foo () { return *this; }
};
T t;
const T& t = t.foo ();

1. Rayslava 13.05.2011 17:37 Home

А нахуя ты это делаешь?

2. hate-engine 13.05.2011 17:37 Psi+

сфигали UB?

3. werehuman 13.05.2011 17:37 4bd3a321

это чудо, что для такого языка написали хоть какой-то компилятор

4. analizer 13.05.2011 17:37 mcabber

где?

5. 0xd34df00dRayslava /1 13.05.2011 17:37 Azoth_primary

По ошибке написал const QString& str = ReturnAString ().replace ("blah", "fooh");

6. 0xd34df00dwerehuman /3 13.05.2011 17:38 Azoth_primary

В /5. Пизда str.

7. analizer0xd34df00d /5 13.05.2011 17:38 mcabber

откуда компилятору было знать что ты хочешь именно temporary bound, а не то что ты написал?

8. werehuman0xd34df00d /6 13.05.2011 17:39

гхм, а может потому, что написанное тобой полностью валидно?

9. 0xd34df00dwerehuman /8 13.05.2011 17:39 Azoth_primary

Orly? А где?

10. 0xd34df00danalizer /7 13.05.2011 17:39 Azoth_primary

Разверни мысль.

11. werehuman0xd34df00d /9 13.05.2011 17:40 4bd3a321

ну как бы ты к const A& присваиваешь объект A

12. 0xd34df00dwerehuman /11 13.05.2011 17:41 Azoth_primary

Правда? А где? QString::replace возвращает QString&, модифицируя this.
Собсна, мой пример был бы ближе к истине, если бы я там написал T ().foo ();

13. analizer0xd34df00d /10 13.05.2011 17:41 mcabber

1. если бы возвращался объект, а не ссылка, то всё было бы заебись, ибо temporary bound. 2. если погромизд сохраняет ссылку, значит погромизду нужно сохранить ссылку. компилятору западло просчитывать что ссылка эта станет невалидной при переходе за «;»

14. analizer0xd34df00d /5 13.05.2011 17:42 mcabber

алсо — нихуя не эквивалент изначального кода

15. 0xd34df00danalizer /13 13.05.2011 17:42 Azoth_primary

Да. Поэтому пусть это будет ворнингом, а не еггогом.
Более того, компилятор же видит, что справа стоит T&, а не T или хотя бы const T&.
Более того, компилятор и не может это просчитать, если replace не определена прям в qstring.h

16. 0xd34df00danalizer /14 13.05.2011 17:42 Azoth_primary

Да. Поэтому я исправил в /12.

17. werehuman0xd34df00d /12 13.05.2011 17:44 4bd3a321

ну ок. Ты к const A& присваиваешь A&. Так тоже не должно быть?

18. 0xd34df00dwerehuman /17 13.05.2011 17:44 Azoth_primary

Да, это чревато.

19. analizer0xd34df00d /15 13.05.2011 17:45 mcabber

не дохуяли компилятору просчитывать надо? а если этот твой replace будет делать: g_GlobalStringsMap["blah"]="fooh"; return g_GlobalStringsMap["blah"]?

20. werehuman0xd34df00d /18 13.05.2011 17:45 4bd3a321

а const A можно присвоить A?

21. analizer0xd34df00d /18 13.05.2011 17:45 mcabber

нихуя не чревато

22. 0xd34df00danalizer /19 13.05.2011 17:46 Azoth_primary

> ворнингом
> ворнингом
> ворнингом
Потому что я могу писать код в три ночи или ревьювить чужой код и не заметить, что справа от того, что должно быть temporary bound, будет хуита, возвращающая T& на локальный для выражения справа объект. Пусть компилятор покажет мне такие места.

И да, не дохуяли. Пусть лучше разработчики компиляторов ебутся, чем программисты на целевом языке. Хаскель-вей, епта.

23. 0xd34df00danalizer /21 13.05.2011 17:46 Azoth_primary

Расскажи это попорченному стеку.

24. 0xd34df00dwerehuman /20 13.05.2011 17:47 Azoth_primary

Да, если есть конструктор копирования, например.

25. werehuman0xd34df00d /22 13.05.2011 17:47 4bd3a321

брось свои личкрафты и иди патчи g++. Вот это будет реально полезное дело

26. werehuman0xd34df00d /24 13.05.2011 17:47 4bd3a321

а почему A не может быть B& ?

27. 0xd34df00dwerehuman /25 13.05.2011 17:47 Azoth_primary

Я не хочу разбираться в этой блевотной куче ебаного С-говна.

28. analizer0xd34df00d /22 13.05.2011 17:48 mcabber

не пизди мне про три ночи, я к этому времени как раз начинаю писать код без ошибок.

29. 0xd34df00dwerehuman /26 13.05.2011 17:48 Azoth_primary

Может, если слева у тебя не reference. Написать QString a = QString ().replace (...) валидно, написать const QString& a = QString ().replace (...) — невалидно, пизда тебе, если ты заюзаешь a потом.

30. werehuman0xd34df00d /27 13.05.2011 17:48 4bd3a321

эта блевотная куча ебаного С-говна компилирует твои радужные личкрафты, которые при запуске пукают бабочками

31. 0xd34df00dwerehuman /30 13.05.2011 17:49 Azoth_primary

Есть гораздо более няшная куча неблевотного неговна на С++ под названием ЛЛВМ и ШЛАНГ.

32. werehuman0xd34df00d /31 13.05.2011 17:49 4bd3a321

но они не умеют кьют, да?

33. 0xd34df00dwerehuman /32 13.05.2011 17:49 Azoth_primary

Сами кути я ими не собирал. Личкрафты собирал еще год назад, и они уже тогда вполне работали.

34. analizer0xd34df00d /33 13.05.2011 17:50 mcabber

и выводили ворнинг на эту строчку, да?

35. 0xd34df00danalizer /34 13.05.2011 17:50 Azoth_primary

ХЗ. Я тогда еще не угорел по temporary bound.

Do you really want to delete ?