Я пытаюсь поиграть с 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).