Cthulhu 21.02.2012 10:03 Miranda

http://habrahabr.ru/blogs/cpp/138586/

Обратная совместимость? Нет, не слышал.

Recommended by:

@4da: вы посмотрите, какой пул вопросов для собеседования

@dorfe: Великолепно!

1. hirthwork 21.02.2012 10:19 mcabber

C++11 не нежен

2. Cthulhuhirthwork /1 21.02.2012 10:20 Miranda

Он не нежен, да, он очень груб!

3. 4da 21.02.2012 10:21 k-pax

я что-то никак не соображу каким хером в C++98 S().n приводится к типу X

4. Cthulhu4da /3 21.02.2012 10:23 Miranda

Кастованием инта через конструктор же.

5. 4daCthulhu /4 21.02.2012 10:24 k-pax

а бля, точно. Как вспомнить все эти тонкости?

6. Cthulhu4da /5 21.02.2012 10:25 Miranda

Настоящий плюсоеб чувствует их жопой, он их не помнит.

7. 4da 21.02.2012 10:27 k-pax

да вы посмотрите, у меня даже такое заработало!

struct X { X(int, int) {} };

void f(X x) {
std::cerr << "X! \n";
}
int main() {
f({S().n, S().n});
}

8. 4da 21.02.2012 10:28 k-pax

чото я пропустил, что объект может инстанцироваться при вызове функции с сигнатурой как у его конструктора.

9. Cthulhu4da /8 21.02.2012 10:41 Miranda

Што. Компилятор не находит более подходящего оверлоада и начинает применять к параметрам касты, вот и все. )

10. 4daCthulhu /9 21.02.2012 10:49 k-pax

интересно, там ведь не был определен operator(), получается, он взаимозаменяем с конструктором в подобных случаях?
алсо, что насчет /7 ?

11. Cthulhu4da /10 21.02.2012 10:54 Miranda

Еще раз. Конструктор, принимающий int, фактически символизирует implicit typecast из инта в объект класса. Следовательно, компилятор может свободно применить этот каст там, где увидит инт и посчитает нужным это сделать. Выбор наиболее подходящей из множества перегруженных функций — одно из таких мест.

А в /7 та же фигня, только вместо инта ты передаешь в функцию список инициализаторов. Если ты уберешь там фигурные скобки — оно не скомпилируется.

12. 4daCthulhu /11 21.02.2012 11:40 k-pax

ладно, потыкался, вспомнил. спасибо.

13. dorfe 21.02.2012 18:49

"компилятор С++11 старается любую функцию, которая может быть константной, считать именно константной"

ппц они ебанулись, just as planned — теперь это два разных языка!
алсо, чего это там про цпп98 лопочут если давно цпп2003 везде?

14. Cthulhudorfe /13 21.02.2012 18:51 Miranda

Ну 03 считается сравнительно minor improvement над 98.

15. dorfeCthulhu /14 21.02.2012 19:24

фигассе минор, зато 11 такой мажор что сломает 100500% программ, ага

16. Cthulhudorfe /15 21.02.2012 19:26 Miranda

Тащемта я не готов сейчас четко ответить, насколько правомерны действия clang в описанном случае. Надо пересмотреть внимательнее соответствующие разделы стандарта — возможно они упороли отсебятину.

17. dorfeCthulhu /16 21.02.2012 19:32

да понятно что это так теперь не оставят, хоть вроде и UB, но вот сколько ещё такой атмты скрывается в этих мажор импрувментах — неизвестно.

19. hirthwork 21.02.2012 19:32 mcabber

да в gcc-то и с текущим стандартом совместимости нет: http://ideone.com/W9q9H (в отличии от шланга).

20. generatorglukoff 22.02.2012 20:07

шошо? int к указателю?? а nullptr куда??
разраб шланга нагло прикидывается шлангом

Do you really want to delete ?