In the below code, I am wrapping std::cin
into a boost::iostreams::filtering_istream
. Calling peek()
on the resulting object seems to block forever since I don't return from peek()
whatever the number of characters that I type (pressing enter every now and then to flush).
#include <iostream>
#include <boost/iostreams/filtering_stream.hpp>
int main()
{
boost::iostreams::filtering_istream in;
in.push(std::cin); // tried (in.push(boost::ref(std::cin)))
if ('a' == std::cin.peek()) std::cout << "ok";
if ('a' == in.peek()) std::cout << "ok"; // blocks whatever the amount of characters typed, I expected it to behave like the std::cin.
return 0;
}
I could not find any indication in the documentation that suggests I am not using the library correctly. I tried to wrap std::cin
with boost::ref
when pushing it to the filtering stream but it did not change the behavior.
I tested the snippet with Visual Studio 2017 (boost 1.75.0 and 1.70.0) and gcc9.3 (boost 1.72.0) and none worked.
Thank you in advance for your help in figuring out what goes wrong.
question from:
https://stackoverflow.com/questions/65861450/why-does-peeking-into-stdcin-through-a-boostiostreamsfiltering-istream-for 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…