You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
While a boost::histogram can be used as a range in C++20, an indexed(histogram) cannot. At least for me (tested with clang++ 13 and g++ 11.3), the following code does not compile:
#include<random>
#include<ranges>
#include<iostream>
#include<boost/histogram.hpp>intmain() {
usingnamespaceboost::histogram;
std::mt19937 rng;
std::exponential_distribution dist;
auto hist = make_histogram(axis::regular<>(20, 1, 10.0));
for (int i = 0; i < 1'000; ++i) {
hist(dist(rng));
}
// these workauto r1 = std::ranges::subrange(hist.cbegin(), hist.cend());
auto v1 = hist | std::views::transform([] (auto&& x) {return1;});
// these don't:auto x = indexed(hist);
auto r2 = std::ranges::subrange(x.cbegin(), x.cend());
auto v2 = indexed(hist) | std::views::transform([] (auto&& x) {return1;});
return0;
}
The text was updated successfully, but these errors were encountered:
It seems that the iterators returned by indexed do not satisfy the std::input_or_output_iterator concept. https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator
It is not immediately obvious why, so this is needs more digging. Technically, they should satisfy that, these iterator requirements are very basic.
Using indexed in ranges is currently not supported, it is untested. I will try to support this, since the syntax is nice and it makes sense to use an indexed in a range expression to strip the flow content.
While a
boost::histogram
can be used as a range in C++20, anindexed(histogram)
cannot. At least for me (tested with clang++ 13 and g++ 11.3), the following code does not compile:The text was updated successfully, but these errors were encountered: