ポインター関係演算子は全順序を定義しません ( § C++11 標準の 5.9 )。
同じ型の2 つのポインター
p
とq
が、同じオブジェクトのメンバーではない異なるオブジェクト、同じ配列の要素、または異なる関数を指している場合、またはそのうちの 1 つだけが null である場合、 、 、 、および の結果p<q
はp>q
指定p<=q
されていませんp>=q
。
std::lessのドキュメントには次のように書かれています。
std::less
任意のポインター型に対するの部分的な特殊化は、組み込みoperator<
がそうでなくても、全体の順序をもたらします。
部分的な順序からこの全体的な順序をどのように生成しますか?
定義を調べ/usr/include/c++/4.9/bits/stl_function.h
ても、この質問に答えることができません。struct less
template<typename _Tp = void>
struct less;
template<typename _Tp>
struct less : public binary_function<_Tp, _Tp, bool>
{
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x < __y; }
};
template<>
struct less<void>
{
template <typename _Tp, typename _Up>
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) < std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) < std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) < std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};