std::basic_streambuf<CharT,Traits>::underflow (3) - Linux Man Pages
virtual int_type underflow();
Ensures that at least one character is available in the input area by updating the pointers to the input area (if needed) and reading more data in from the input sequence (if applicable). Returns the value of that character (converted to int_type with Traits::to_int_type(c)) on success or Traits::eof() on failure.
The function may update gptr, egptr and eback pointers to define the location of newly loaded data (if any). On failure, the function ensures that either gptr() == nullptr or gptr() == egptr.
The base class version of the function does nothing. The derived classes may override this function to allow updates to the get area in the case of exhaustion.
The value of the character pointed to by the get pointer after the call on success, or Traits::eof() otherwise.
The base class version of the function returns traits::eof().
The public functions of std::streambuf call this function only if gptr() == nullptr or gptr() >= egptr().
// Run this code
uflow reads characters from the associated input sequence to the get area and advances the next pointer
overflow writes characters to the associated output sequence from the put area
underflow reads from the associated file
underflow returns the next character available in the input sequence
underflow reads a character from the input sequence without advancing the next pointer