【发布时间】:2012-08-06 00:54:14
【问题描述】:
我试图编译这段代码:
#include <boost/range/adaptors.hpp>
#include <boost/range/algorithm.hpp>
#include <vector>
int main() {
std::vector<int> v{
1,5,4,2,8,5,3,7,9
};
std::cout << *boost::min_element(v | boost::adaptors::transformed(
[](int i) { return -i; })) << std::endl;
return 0;
}
编译失败并显示以下错误消息(在很长的模板实例化小说之后):
/usr/local/include/boost/iterator/transform_iterator.hpp:84:26: error: use of deleted function ‘main()::<lambda(int)>::<lambda>()’
../main.cpp:12:5: error: a lambda closure type has a deleted default constructor
我搜索了这个问题,并在 Boost Users 邮件列表存档中找到了this。它建议使用#define BOOST_RESULT_OF_USE_DECLTYPE 可以解决问题。我把它放在我代码的最开始,但它仍然无法编译。错误信息的长度似乎短了很多,但最后的错误信息是一样的。我目前使用的是 Boost 1.50。
这可能是什么问题?有什么办法可以做到这一点?
【问题讨论】:
-
我认为你需要 1.51。至少这就是它对我有用的原因。
标签: c++ boost lambda c++11 boost-range