27template <
class ContainerOrValue,
class OutputIterator>
28OutputIterator flatten_impl(ContainerOrValue
const &c, OutputIterator out) {
29 if constexpr (std::is_assignable_v<
decltype(*out), ContainerOrValue>) {
33 using ValueType =
typename ContainerOrValue::value_type;
34 for (
auto const &e : c) {
35 out = flatten_impl<ValueType, OutputIterator>(e, out);
55template <
class Range,
class OutputIterator>
56void flatten(Range
const &v, OutputIterator out) {
57 detail::flatten_impl<Range, OutputIterator>(v, out);
void flatten(Range const &v, OutputIterator out)
Flatten a range of ranges.