одна фика
я вот значит про std::less
докладываю практически из траншей,
потому что те кто могли бы и подсказать – не подсказывают.
но нет! надо просто ездить в правильные места
и ходить на фику с правильными людьми.
вообще институт фики в Швеции совершенно изумителен:
сидят люди, решают серьезные проблемы
(“у меня тут идея! давайте сделаем Х и тем самым Y, Z и даже W?!”),
стучат кулаками по столу в поисках синергии, key results и коммитментов,
один с озабоченным выражением лица размашисто нарезает вокруг стола нервные хорды,
и вдруг – дверь открывается –
и девушка с волосами цвета льна ослепительно улыбается зубами
и словно колокольчик журчит:
– фика!
и тут же все Очень Озабоченные и крайне Серьезные люди
мгновенно забывают о смертельном смысле сочетания слов “opportunity” и “alignment”,
и, совершенно изменившиеся, искренне улыбаются, болтают о всяком,
в окутанном чудесным ароматом свежего кофе волшебстве фики,
в непринужденном флирте чашечки кофе, микроподарка из bakery
и дружеского разговора о другом.
– слышал, std::less
и std::greater
теперь совместимы?
– неужели?! я всё пропустил!
– представляешь, еще в мае оказывается, предложили новый wording.
– и что там теперь? неужели ввели по-настоящему Общий Для Всех, тотальный, ордер?
– практически! вот новый текст:
-14- For templates
greater
,less
,greater_equal
, andless_equal
, the specializations for any pointer type yield the same total order. That total order is consistent with the partial order imposed by the built-in operators<
,>
,<=
, and>=
. [Note: Whena < b
is well-defined for pointersa
andb
of typeP
, this implies(a < b) == less<P>(a, b)
,(a > b) == greater<P>(a, b)
, and so forth. — end note]
For template specializationsgreater<void>
,less<void>
,greater_equal<void>
, andless_equal<void>
, if the call operator calls a built-in operator comparing pointers, the call operator yields a total order. (DR 2562)
– и все понимающе улыбаются, благодарные и гордые за далеких но таких родных Воинов Света, от чистого сердца проливающих человекомесяцы своей жизни в борьбе за Тотальную Унификацию и искоренение Неопределенного Поведения Сиплюсплюса,
и дарящих нам всем эти хрустальные минуты,
минуты невинной радости человеческому бытию,
минуты кристально-ясной экзистенции,
– минуты фики.
@Zeux:
А зачем приписка про void
?
И что значит “if the call operator calls a built-in operator comparing pointers”
@aruslan:
приписка про void
- и, более конкретно, про call operator на std::less<void>
- это такой изысканный способ легализовать
int *a, *b;
void* av = a; void* bv = b;
std::less<void>()(av, bv)
который понятное дело раньше был бессмысленнен потому что сравнивать можно только указатели на объекты одного типа внутри одного полного объекта или массива,
а объектов типа void
как известно [**] не существует.
[**] но можно возвращать не только void
но и const void
.
[***] можно так же иметь массивы void
, но только как параметры.
[****] в принципе у этого всего можно и sizeof
брать, и alignof
, если подумать.
[*****] но иногда лучше просто присоединиться к фике и получить свой кусочек радости.
(из Стокгольма, спецкор Порнографического Вестника Консерватории, члкоробщ вфорхб @aruslan.)