因此,我尝试使用Boost Hana的any_of方法,但与实现中的描述不同,它仍然在首先满足谓词的元素之后调用元素。这是个通晓的虫子吗?
这是一个MCVE
#include <iostream>
#include <boost/hana.hpp>
int main() {
auto t = boost::hana::tuple_t<int, double, float>;
boost::hana::any_of(t, [](auto) { std::cout << "Called\n"; return true; });
}输出:
Called
Called发布于 2017-02-03 21:59:51
这是个bug,谢谢你找到它。谓词总是被重新计算一次,而不是严格必要的。这个bug是由此承诺修复的,它将进入Boost 1.64.0。
说,Hana的文档特别禁止您依赖这个(并且在发送给算法的函数中也有副作用):http://boostorg.github.io/hana/#tutorial-algorithms-effects。因此,虽然我从性能角度来看它是一个bug,但严格地说,它并不是一个bug,因为它没有违背库给您的契约。
我之所以不能将函数的这一部分作为契约,是因为它可能会阻止某些实现策略的有效性,而我希望保持这种自由。如果用例是令人信服的,我会更认真地考虑它,但它似乎不是。
https://stackoverflow.com/questions/42012512
复制相似问题