自动检查严格的弱排序

时间:2016-04-14 21:40:22

标签: c++ gcc compiler-errors

std::sort函数依赖于某种形式的成对比较子例程。该子例程可以采用明确提供的比较函数的形式,或者可以采用operator<重载的形式。在任何一种情况下,比较器必须定义严格的弱排序。如果比较器没有定义这样的排序,那么这会导致未定义的行为。 this Stack Overflow question中提供了一个示例。根据我自己的经验,我遇到了将两个对象的数据与<=而不是<进行比较会导致一系列非确定性错误(包括堆栈或堆损坏和分段错误)的情况。

所以我的问题是:是否存在任何工具来识别不执行严格弱序的无效比较器?

我原本希望找到一个GCC标志(例如“-Werror = require-strict-weak-ordering”),但我找不到这样的东西。考虑到这些错误的引入是多么容易,它们的诊断难度,以及可能的影响有多广泛,我很惊讶某种形式的自动检测不是GCC的默认设置。即使在编译时无法检测到这种情况,运行时断言也会非常有用。任何东西都会比腐败的堆栈和猜测时间更好。

0 个答案:

没有答案