当时的boost :: bool_testable <>搬迁或拆除?(Was boost

2019-06-24 05:26发布

我想利用boost::bool_testable<>从Boost.Operators)来实现的一类安全布尔成语,但最近图书馆的版本(1.49为这篇文章的)似乎并没有把它了。

它到哪里去了? 是否有可用的一个更好的选择,现在,我只是错过了?

我不能够使用C ++ 11,因此不能使用语言扩展,使安全布尔不必要的。

Answer 1:

这是一个迟到的回答,但我只是很活跃的堆栈溢出的时间很短,我刚发现你的问题。 我Boost.Operators的维护者和我取出 bool_testable在2003年12月回到它可能accidentially被释放。

萨姆·帕廷顿提出的这几个星期前,我把它添加到CVS仓库。 它在一开始看起来前途无量,但很快问题在某些scenarious露面。

主要的问题,IIRC,一类T衍生自boost::bool_testable<T>有与转换检测做。 一类是可转换为bool ,而不是int ,应该产生boost::is_convertible<T,int>::value == false ,但相反,它成为暧昧与你结束了一个编译失败。

此外,还有其他的问题,解决这些问题的一个通常意味着打破另一个。 一个例子涉及哪些类型的用户想要显式转换到bool 他自己的operator int()

所以,长话短说,我们从来没有想出如何使它足够强大。 如有疑问,好处太小(复制粘贴代码安全〜5行)与潜在问题相比,我决定发挥它的安全,所以我删除它。

它被删除后,这个问题再也没有上来,人们终于开始或者复制粘贴安全-布尔-成语代码到他们的课程,或(一段时间后),他们开始使用explicit operator bool()因为它变得可用。

这就是说,它是最好的,如果你只是手动复制线。 我知道这是不是一个完美的解决方案,我不喜欢复制粘贴下去,但替代品都是比这更糟糕。



文章来源: Was boost::bool_testable<> relocated or removed?