используя ranges::views::common с ranges::istream_view
этот код отлично компилируется с
Visual Studio 2022 (v143)
а также
/std:c++latest
.
auto result{ ranges::istream_view<int>(cin)
| views::take_while([](const auto& v) { return v != -1; })
};
но добавление
views::common
:
auto result{ ranges::istream_view<int>(cin)
| views::take_while([](const auto& v) { return v != -1; })
| views::common
};
заставляет компилятор жаловаться:
Error (active) E0349 no operator "|" matches these operands Project19 C:\Project19\Project19\Source.cpp 75
Error C2678 binary '|': no operator found which takes a left-hand operand of type 'std::ranges::take_while_view<std::ranges::basic_istream_view<int,char,std::char_traits<char>>,_Ty>' (or there is no acceptable conversion) Project19 C:\Project19\Project19\Source.cpp 74
Error C2119 'result': the type for 'auto' cannot be deduced from an empty initializer Project19 C:\Project19\Project19\Source.cpp 73
использование ranges::views::iota в порядке:
auto result{ views::iota(-10)
| views::take_while([](const auto& v) { return v != -1; })
| views::common
};
почему это? Пожалуйста, включите ссылки для возможных объяснений.