【发布时间】:2016-04-22 09:47:25
【问题描述】:
考虑这段代码:
std::sort(vec.begin(), vec.end(),
[](const Foo& lhs, const Foo& rhs) { return !(lhs < rhs); }
);
如果 lhs == rhs,则 lambda(lhs, rhs) 和 lambda(rhs, lhs) 都将返回 true,这违反了提供 严格 弱排序的要求。但是,标准是否明确将传递此类比较器标记为未定义行为?
【问题讨论】:
-
好吧,如果行为被很好地定义了,那么诸如 Visual C++ 调试运行时之类的编译器将永远不会在运行时对这样的构造
assert,而在非调试运行时,就让代码去吧把排序搞砸了。
标签: c++ stl undefined-behavior