Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

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
       context.
	  2) Returns true if the stream	has no errors and is ready for I/O op-
       erations.
	  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 oc-
       cur 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
       returns 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
       applied.

	  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 be-
       havior
	  LWG 468 C++98	     operator void* was	    a conversion  function  to
       an unspecified
			     provided		     boolean  type is provided
       instead

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
       operator!
	       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)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::basic_ios::operatorbool&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help