@Alexey Frunze: Открыл для себя новый сериал.
Давно таких эмоций не испытывал во время киносеанса! Называется CppCon.
@Alexander Radchenko: пилотная серия там отличная, да
@Ivan Tarasov: требую спойлеры!

@aruslan: CppCon – абсолютный экстаз!

мы только-только сходили на замечательный фестиваль вкусной еды на Форт Мейсон в СФ, где собрали локальных производителей “артизанского” шоколада, мёда, кофе, карамели итд итп,

и вот я взял распробовать совершенно божественную Black Lava карамельку
– и подумал, какой всё-таки С++ удивительный язык: янтарный и будто прозрачный издалека —- а ближе тянется нитями, оставляя горчинку.

казалось бы, давайте не будем думать о всяких ужасах антиалиасинга и std::launder,
и сфокусируемся на ребристом, сермяжном варианте С++, например таком:

std::map<int, int> m;
m[0] = m.size();  // ах, какая терпкая нотка!

или, еще прагматичнее и менее безобидно, прямо из P0145:

std::string s = "but I have heard it works even if you don’t believe in it";
s.replace(0, 4, "").replace(s.find("even"), 4, "only").replace(s.find(" don’t"), 6, "");
assert(s == "I have heard it works only if you believe in it");

– и сразу чувствуешь взрыв вкуса в карамели!

“потому что она с морской солью, стимулирующей вкусовые рецепторы”, –
скажут вам плоские, бездуховные люди.

а ведь можно написать например утилитку, которая берет и прогоняет исходники во все разнообразные разрешенные стандартом порядки вычислений выражений. и вдруг выясняется, что даже без sequenced before, happens before, relaxed memory order и std::kill_dependency
– оно все очень красиво покрывается фрактальными узорами судьбы.

пример с .replace особенно показателен: любители std::future в библиотеках любят еще и .then(), и хотя большинство людей знают что не надо делать

printf("%d %d %d", read(), read(), read());

– оно как-то не переходит в знание более интеллектуально-массажирующих форм типа

std::cout << a() << b() << c();

и что вы думаете.
как раз в продолжение разговора за кофе о std::launder, в Рабочей Группе по Уничтожению Неопределенного Поведения С++ внезапно ожил старый пропозал:
– а давайте, братья, договоримся о конкретном порядке вычисления выражений в С++,
а потом воспользуемся Правилом “как если бы”,
и, – взяв вторую Black Lava with Sea Salt, – сделаем порядок вычисления выражений с Перегруженными Операторами таким же “как если бы” операторы были встроенными!

меня как-то спросили, зачем я так переживаю за сиплюсплюс.
ах что вы.

я крайне наоборот – нахожу в сиплюсплюсе удивительный уголок спокойствия среди бурь и сплошного Edge of Tomorrow.

и вот например этот пропозал про Единственно Возможный Интуитивно-Понятный Порядок Вычисления Выражений – он прямо как Гречиховый (или Гречишный?) Мёд с фестиваля Вкусной Еды 2016 в Форт Мейсоне, СФ.

вместе с терпким вкусом он словно дарит нам сладкую и согревающую уверенность в завтрашнем дне.

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

сегодня утром был страшный ливень, и я ехал на работу, смотрел на армагеддон кругом и думал о том, какая все-таки красивая радуга с противоположной стороны от солнца на краю шторма.

иногда радуга бывает двойной, особенно если программисты думают что всё знают про NaN.
чтобы не портить приятное послевкусие от гречишного мёда, мы не будем говорить про тех для кого и -0.0 - NaN: те, кто выжили хотя бы одну игру в сиплюсплюсе – знают что любые входные значения надо санировать, иначе придется различать например partial и weak и total order.

глядя на бесстрашных автолюбителей, аквапланирующих на 50 миль в час по крайней левой луже и стрейфящихся обогнать друг друга, нельзя не вспомнить про результат операций с underflow, негативный ноль, его особенности сравнения со всем остальным, и то,
что std::sort с разнообразными пермутациями { -1.0, -0.0, +0.0, -0.0, +1.0 } выдает что называется “inconsistent” результаты.
это такой мягкий способ сказать, что результаты будут зависеть от порядка во входном массиве.

тут мой коммьют подошел к концу, и упражнения о разнице между stable и consistent, а так же “какой order ожидается для T в std::sort<T>” я оставляю любознательному читателю.

скажу лишь, что двойная радуга в СФ – это не только дождь,
но и выставка Единорога Рафаэля в Legion of Honor,
чего и вам желаю.

@Zeux: std::sort на массиве floating point вообще нельзя использовать.
некоторые реализации (конкретно OSX/iOS, может вообще любой libstdc++?)
любят проехаться по памяти за границей массива если в нем есть NaN

Simon Kozlov: Мне под впечатлением от карамели @aruslan показалось,
что ты написал “нельзя реализовать”
И я даже не удивился.

(оригинал на кружках)