table of contents
        
      
      
    - Tumbleweed 2024.07.05-1.3
 - Leap-16.0
 - Leap-15.6
 
| std::basic_ios::operatorbool(3) | C++ Standard Libary | std::basic_ios::operatorbool(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 operations.
  
   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 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 retroactively 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 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
| 2024.06.10 | http://cppreference.com |