Std:: less <void> и типы указателей
std::less<T *>
гарантированно обеспечивает общий порядок, независимо от того, указывают оба указателя в один и тот же массив.
В последнем черновике стандарта, то же самое верно для прозрачного объекта функции std::less<void>
(std::less<>
), когда вы вызываете его operator()
?
Очевидно, что тот же вопрос относится к std::greater
, но я предполагаю, что они указаны одинаково.
Ответы
Ответ 1
В текущем черновике из github не содержится никакого языка для этого; на самом деле его определение less<>
явно говорит "возвращает std::forward<T>(t) < std::forward<U>(u)
", что будет undefined для несравнимых указателей. Поэтому... не делай этого, я полагаю.
Если вам нужен гетерогенный компаратор-указатель, лучше всего написать свой собственный предикат шаблона, который в подходящий момент использует std::less<T*>()
.
Ответ 2
std::less<void>
- это поведение undefined. std::less
требуется либо тип указателя (для которого существует специальное правило), либо тип, для которого определен <
.