【发布时间】:2015-06-03 10:13:16
【问题描述】:
指针关系运算符不定义总顺序 (§ 5.9 of the C++11 standard):
如果两个相同类型的指针
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;
};
【问题讨论】:
标签: c++ c++11 stl relational partial-ordering