我有一个简单的boost转换范围,该函数通过引用返回。但是iterator_facade的use_operator_brackets_proxy返回false,因此它尝试返回对临时对象的引用;
查看此螺栓的链接 https://godbolt.org/z/yN_vuS
已隔离。
如果输入向量不是const,则正确打印结果。 https://godbolt.org/z/3uAHb-
#include <iostream>
#include <boost/range/adaptor/transformed.hpp>
#include <string>
#include <vector>
template<typename T>
void print(T&& r ){
std::cout << r[1];
}
int main(){
const std::vector<double> input{0.0,1.0,2.0,3.0,4.0};
const std::vector<int> indices = {0,2,4};
auto indexing = [](auto&& seq){
return [&seq](const auto idx) -> decltype(auto){
return seq[idx];
};
};
using boost::adaptors::transformed;
print(indices | transformed(indexing(input)));
}