home | help
std::basic_...peratorbool(3)   C++ Standard Libary  std::basic_...peratorbool(3)

NAME
     std::basic_ios::operatorbool - std::basic_ios::operatorbool

Synopsis
	operator /* unspecified-boolean-type */() const; (1) (until C++11)
	explicit operator bool() const; 		 (2) (since C++11)

	Checks whether the stream has no errors.

	1)  Returns  a	value  that  evaluates	to false in a boolean context if
     fail() returns
	true, otherwise returns a value that evaluates to true in a boolean con-
     text.
	2) Returns true if the stream has no errors and is ready for I/O  opera-
     tions.
	Specifically, returns !fail().

	This operator makes it possible to use streams and functions that return
     references
	to  streams  as  loop  conditions,  resulting in the idiomatic C++ input
     loops such as
	while (stream >> value) {...} or  while  (std::getline(stream,	string))
     {...}. Such
	loops execute the loop's body only if the input operation succeeded.

Parameters
	(none)

Return value
	1) A value that evaluates to true in a boolean context if the stream has
     no errors,
	a value that evaluates to false in a boolean context otherwise.
	2) true if the stream has no errors, false otherwise.

Notes
	This  conversion  can be used in contexts where a bool is expected (e.g.
     an if
	condition). However, implicit conversions (e.g. to int) that  can  occur
     with bool are
	not allowed.

	In  C++98,  operator bool could not be provided directly due to the safe
     bool problem.
	The initial solution in C++98 is to provide operator  void*,  which  re-
     turns a null
	pointer  if  fail()  returns true or a non-null pointer otherwise. It is
     replaced by
	the resolution of LWG issue 468, which allows Safe Bool idiom to be  ap-
     plied.

	Since C++11, conversion functions can be explicit. The resolution of LWG
     issue 1094
	introduced  the explicit operator bool and the boolean conversion is now
     safe.

Example
     // Run this code

      #include <iostream>
      #include <sstream>

      int main()
      {
	  std::istringstream s("1 2 3 error");
	  int n;

	  std::cout << std::boolalpha << "s  is  "  <<	static_cast<bool>(s)  <<
     '\n';
	  while (s >> n)
	      std::cout << n << '\n';
	  std::cout << "s is " << static_cast<bool>(s) << '\n';
      }

Output:
      s is true
      1
      2
      3
      s is false

	Defect reports

	The  following	behavior-changing  defect  reports were applied retroac-
     tively to
	previously published C++ standards.

	  DR	Applied to Behavior as published	       Correct behavior
	LWG 468 C++98	   operator void* was	  a conversion	function  to  an
     unspecified
			   provided		   boolean  type is provided in-
     stead

See also
	The following table shows the  value  of  basic_ios  accessors	(good(),
     fail(), etc.)
	for all possible combinations of ios_base::iostate flags:

	     ios_base::iostate flags basic_ios accessors
	     eofbit  failbit  badbit good() fail() bad() eof() operator bool op-
     erator!
	     false     false	  false    true     false    false   false  true
     false
	     false    false	true	 false	  true	   true    false   false
     true
	     false     true	  false    false    true     false  false  false
     true
	     false    true	true	 false	  true	   true    false   false
     true
	     true      false	  false    false    false    false   true   true
     false
	     true     false	true	 false	  true	   true    true    false
     true
	     true      true	  false    false    true     false  true   false
     true
	     true     true	true	 false	  true	   true    true    false
     true

http://cppreference.com 	   2024.06.10	    std::basic_...peratorbool(3)

home | help