std::less<T *> гарантированно обеспечивает общий порядок, независимо от того, указывают оба указателя в один и тот же массив.
В последнем черновике стандарта, то же самое верно для прозрачного объекта функции std::less<void> (std::less<>), когда вы вызываете его operator()?
Очевидно, что тот же вопрос относится к std::greater, но я предполагаю, что они указаны одинаково.