9

ポインター関係演算子は全順序を定義しません ( § C++11 標準の 5.9 )。

同じ型の2 つのポインターpqが、同じオブジェクトのメンバーではない異なるオブジェクト、同じ配列の要素、または異なる関数を指している場合、またはそのうちの 1 つだけが null である場合、 、 、 、および の結果p<qp>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;
    };
4

1 に答える 1