birdwatcher: (Mr. Twister)
[personal profile] birdwatcher
Оказывается, если в std::sort передать сравнивающую функцию, не устанавливающую строгий слабый порядок, то sort натурально полезет сравнивать произвольные несуществующие вещи за пределами массива и свалится. Я вообще-то ожидал, что просто плохо отсортирует.

Date: 2016-09-10 10:27 am (UTC)
ak_47: (default)
From: [personal profile] ak_47
Я проверил на паре компалеров - так и есть. В одних случаях плохо сортирует, в других бьёт память. Собственно, давать поломаный предикат в std::sort это undefined behaviour, так что с них взятки гладки. :)

Date: 2016-09-10 10:55 am (UTC)
From: [identity profile] birdwatcher.livejournal.com
Я как раз рад, что лишний раз границы не проверяют и время не тратят, но при сортировке массива с известными началом и концом выглядит эффектно.

Date: 2016-09-10 11:52 am (UTC)
ak_47: (Default)
From: [personal profile] ak_47
Кстати, единственная имплементация, которая почуяла проблему - MS Visual C++. В дебаг версии срабатывает ассерт с правильным сообщением что компаратор плохой.

Date: 2016-09-10 11:59 am (UTC)
From: [identity profile] birdwatcher.livejournal.com
developers.gif