std::is_error_code_enum<std::io_errc> (3) - Linux Manuals

std::is_error_code_enum<std::io_errc>: std::is_error_code_enum<std::io_errc>


std::is_error_code_enum<std::io_errc> - std::is_error_code_enum<std::io_errc>


Defined in header <ios>
template< > (since C++11)
struct is_error_code_enum<std::io_errc> : public std::true_type { };

This specialization of std::is_error_code_enum informs other library components that values of type std::io_errc are enumerations that hold error codes, which makes them implicitly convertible and assignable to objects of type std::error_code.

Inherited from std::integral_constant

Member constants

value true
         (public static member constant)

Member functions

              converts the object to bool, returns value
operator bool (public member function)

operator() returns value
              (public member function)

Member types

Type Definition
value_type bool
type std::integral_constant<bool, value>


The comparison between e.code() and std::io_errc::stream compiles because std::is_error_code_enum<std::io_errc>::value == true
// Run this code

  #include <iostream>
  #include <fstream>
  int main()
      std::ifstream f("doesn't exist");
      try {
      } catch (const std::ios_base::failure& e) {
          std::cout << "Caught an ios_base::failure.\n";
          if(e.code() == std::io_errc::stream)
              std::cout << "The error code is std::io_errc::stream\n";


  Caught an ios_base::failure.
  The error code is std::io_errc::stream

See also

is_error_code_enum identifies a class as an error_code enumeration
                   (class template)

error_code holds a platform-dependent error code

io_errc the IO stream error codes