Hana any_of?

时间:2017-02-02 21:21:14

标签: c++ boost boost-hana

所以我尝试使用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

1 个答案:

答案 0 :(得分:4)

这是一个错误;谢谢找到它。对谓词的评估总是比严格必要的时间多一次。该错误由this commit修复,它将进入Boost 1.64.0。

据说,Hana的文档专门禁止您依赖此(并且在您发送给算法的函数中也有副作用):http://boostorg.github.io/hana/#tutorial-algorithms-effects。因此,虽然从性能角度来看它是一个错误,但严格来说并不是一个错误,因为它不会破坏图书馆给你的合同。

我之所以无法完成函数合同的这一部分,原因在于它可能会阻止某些实现策略的有效性,我希望保持这种自由。如果用例引人注目,我会更认真地考虑它,但似乎不是。