используя 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
};

почему это? Пожалуйста, включите ссылки для возможных объяснений.

0 ответов

Другие вопросы по тегам