Cthulhu
21.02.2012 10:03 Miranda
http://habrahabr.ru/blogs/cpp/138586/
Обратная совместимость? Нет, не слышал.
C++11 не нежен
Он не нежен, да, он очень груб!
я что-то никак не соображу каким хером в C++98 S().n приводится к типу X
Кастованием инта через конструктор же.
а бля, точно. Как вспомнить все эти тонкости?
Настоящий плюсоеб чувствует их жопой, он их не помнит.
да вы посмотрите, у меня даже такое заработало!
struct X { X(int, int) {} };
void f(X x) {
std::cerr << "X! \n";
}
int main() {
f({S().n, S().n});
}
чото я пропустил, что объект может инстанцироваться при вызове функции с сигнатурой как у его конструктора.
Што. Компилятор не находит более подходящего оверлоада и начинает применять к параметрам касты, вот и все. )
интересно, там ведь не был определен operator(), получается, он взаимозаменяем с конструктором в подобных случаях?
алсо, что насчет /7 ?
Еще раз. Конструктор, принимающий int, фактически символизирует implicit typecast из инта в объект класса. Следовательно, компилятор может свободно применить этот каст там, где увидит инт и посчитает нужным это сделать. Выбор наиболее подходящей из множества перегруженных функций — одно из таких мест.
А в /7 та же фигня, только вместо инта ты передаешь в функцию список инициализаторов. Если ты уберешь там фигурные скобки — оно не скомпилируется.
ладно, потыкался, вспомнил. спасибо.
"компилятор С++11 старается любую функцию, которая может быть константной, считать именно константной"
ппц они ебанулись, just as planned — теперь это два разных языка!
алсо, чего это там про цпп98 лопочут если давно цпп2003 везде?
Ну 03 считается сравнительно minor improvement над 98.
фигассе минор, зато 11 такой мажор что сломает 100500% программ, ага
Тащемта я не готов сейчас четко ответить, насколько правомерны действия clang в описанном случае. Надо пересмотреть внимательнее соответствующие разделы стандарта — возможно они упороли отсебятину.
да понятно что это так теперь не оставят, хоть вроде и UB, но вот сколько ещё такой атмты скрывается в этих мажор импрувментах — неизвестно.
да в gcc-то и с текущим стандартом совместимости нет: http://ideone.com/W9q9H (в отличии от шланга).
шошо? int к указателю?? а nullptr куда??
разраб шланга нагло прикидывается шлангом