指针关系运算符不定义总顺序(C++11 标准第 5.9 节):
如果两个相同类型的指针指向不同的对象
p
,q
这些对象不是同一对象的成员或同一数组的元素或不同的函数,或者如果其中只有一个为空,则 、 、 和 的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;
};