我正在尝试使用range-v3,但遇到了一个问题:它没有按照我想要的那样从向量中提取值。
请参见下面的代码:
在运行时,它输出(0,0),而不是我所想的,即(1,0)
如果我取消注释行auto pairs = ...
,则结果将更改,并且输出变为(33144464,0),尽管变量pairs
未使用(并且断言将失败)
#include <iostream>
#include <vector>
#include <range/v3/all.hpp>
auto foo()
{
auto values = std::vector<int> { 1, 0 };
// auto pairs = std::vector< std::pair<int, int> > { { 1, 0 }, { 0, 1 }, { 0, 0 } };
return ranges::view::for_each(values, [=](int nb)
{
std::cout << " nb=" << nb << std::endl;
assert( (nb == 0) || (nb == 1) );
return ranges::yield(nb);
});
}
int main()
{
ranges::for_each(foo(), [](auto v) {
std::cout << v << "\n";
});
}
此代码是使用以下命令使用g ++(g ++(Ubuntu 7.3.0-27ubuntu1〜18.04)7.3.0)和clang ++(clang版本8.0.0(tags / RELEASE_800 / final))编译的:
g++ foo.cpp -std=c++14 -Irange-v3/include -Wall -Wpedantic
clang++ foo.cpp -std=c++14 -Irange-v3/include -Wall -Wpedantic
我正在使用Range-v3的新克隆,并且可以在ubuntu和OSX(使用AppleClang)上复制它。
答案 0 :(得分:0)
有一个名为-Wlifetime
的实验性功能,可以在godbolt上使用。它给出以下警告,指出从foo
返回。
[x86-64 clang (experimental -Wlifetime) #1] warning: returning a dangling Pointer [-Wlifetime]
[x86-64 clang (experimental -Wlifetime) #1] note: pointee 'values' left the scope here