1e78f53d1SNikolas Klauser// -*- C++ -*- 2e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===// 3e78f53d1SNikolas Klauser// 4e78f53d1SNikolas Klauser// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5e78f53d1SNikolas Klauser// See https://llvm.org/LICENSE.txt for license information. 6e78f53d1SNikolas Klauser// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7e78f53d1SNikolas Klauser// 8e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===// 9e78f53d1SNikolas Klauser 10*ce777190SNikolas Klauser#ifndef _LIBCPP___CXX03_SYSTEM_ERROR 11*ce777190SNikolas Klauser#define _LIBCPP___CXX03_SYSTEM_ERROR 12e78f53d1SNikolas Klauser 13e78f53d1SNikolas Klauser/* 14e78f53d1SNikolas Klauser system_error synopsis 15e78f53d1SNikolas Klauser 16e78f53d1SNikolas Klausernamespace std 17e78f53d1SNikolas Klauser{ 18e78f53d1SNikolas Klauser 19e78f53d1SNikolas Klauserclass error_category 20e78f53d1SNikolas Klauser{ 21e78f53d1SNikolas Klauserpublic: 22e78f53d1SNikolas Klauser virtual ~error_category() noexcept; 23e78f53d1SNikolas Klauser 24e78f53d1SNikolas Klauser constexpr error_category(); 25e78f53d1SNikolas Klauser error_category(const error_category&) = delete; 26e78f53d1SNikolas Klauser error_category& operator=(const error_category&) = delete; 27e78f53d1SNikolas Klauser 28e78f53d1SNikolas Klauser virtual const char* name() const noexcept = 0; 29e78f53d1SNikolas Klauser virtual error_condition default_error_condition(int ev) const noexcept; 30e78f53d1SNikolas Klauser virtual bool equivalent(int code, const error_condition& condition) const noexcept; 31e78f53d1SNikolas Klauser virtual bool equivalent(const error_code& code, int condition) const noexcept; 32e78f53d1SNikolas Klauser virtual string message(int ev) const = 0; 33e78f53d1SNikolas Klauser 34e78f53d1SNikolas Klauser bool operator==(const error_category& rhs) const noexcept; 35e78f53d1SNikolas Klauser bool operator!=(const error_category& rhs) const noexcept; // removed in C++20 36e78f53d1SNikolas Klauser bool operator<(const error_category& rhs) const noexcept; // removed in C++20 37e78f53d1SNikolas Klauser strong_ordering operator<=>(const error_category& rhs) const noexcept; // C++20 38e78f53d1SNikolas Klauser}; 39e78f53d1SNikolas Klauser 40e78f53d1SNikolas Klauserconst error_category& generic_category() noexcept; 41e78f53d1SNikolas Klauserconst error_category& system_category() noexcept; 42e78f53d1SNikolas Klauser 43e78f53d1SNikolas Klausertemplate <class T> struct is_error_code_enum 44e78f53d1SNikolas Klauser : public false_type {}; 45e78f53d1SNikolas Klauser 46e78f53d1SNikolas Klausertemplate <class T> struct is_error_condition_enum 47e78f53d1SNikolas Klauser : public false_type {}; 48e78f53d1SNikolas Klauser 49e78f53d1SNikolas Klausertemplate <class _Tp> 50e78f53d1SNikolas Klauserinline constexpr bool is_error_condition_enum_v = is_error_condition_enum<_Tp>::value; // C++17 51e78f53d1SNikolas Klauser 52e78f53d1SNikolas Klausertemplate <class _Tp> 53e78f53d1SNikolas Klauserinline constexpr bool is_error_code_enum_v = is_error_code_enum<_Tp>::value; // C++17 54e78f53d1SNikolas Klauser 55e78f53d1SNikolas Klauserclass error_code 56e78f53d1SNikolas Klauser{ 57e78f53d1SNikolas Klauserpublic: 58e78f53d1SNikolas Klauser // constructors: 59e78f53d1SNikolas Klauser error_code() noexcept; 60e78f53d1SNikolas Klauser error_code(int val, const error_category& cat) noexcept; 61e78f53d1SNikolas Klauser template <class ErrorCodeEnum> 62e78f53d1SNikolas Klauser error_code(ErrorCodeEnum e) noexcept; 63e78f53d1SNikolas Klauser 64e78f53d1SNikolas Klauser // modifiers: 65e78f53d1SNikolas Klauser void assign(int val, const error_category& cat) noexcept; 66e78f53d1SNikolas Klauser template <class ErrorCodeEnum> 67e78f53d1SNikolas Klauser error_code& operator=(ErrorCodeEnum e) noexcept; 68e78f53d1SNikolas Klauser void clear() noexcept; 69e78f53d1SNikolas Klauser 70e78f53d1SNikolas Klauser // observers: 71e78f53d1SNikolas Klauser int value() const noexcept; 72e78f53d1SNikolas Klauser const error_category& category() const noexcept; 73e78f53d1SNikolas Klauser error_condition default_error_condition() const noexcept; 74e78f53d1SNikolas Klauser string message() const; 75e78f53d1SNikolas Klauser explicit operator bool() const noexcept; 76e78f53d1SNikolas Klauser}; 77e78f53d1SNikolas Klauser 78e78f53d1SNikolas Klauser// non-member functions: 79e78f53d1SNikolas Klausertemplate <class charT, class traits> 80e78f53d1SNikolas Klauser basic_ostream<charT,traits>& 81e78f53d1SNikolas Klauser operator<<(basic_ostream<charT,traits>& os, const error_code& ec); 82e78f53d1SNikolas Klauser 83e78f53d1SNikolas Klauserclass error_condition 84e78f53d1SNikolas Klauser{ 85e78f53d1SNikolas Klauserpublic: 86e78f53d1SNikolas Klauser // constructors: 87e78f53d1SNikolas Klauser error_condition() noexcept; 88e78f53d1SNikolas Klauser error_condition(int val, const error_category& cat) noexcept; 89e78f53d1SNikolas Klauser template <class ErrorConditionEnum> 90e78f53d1SNikolas Klauser error_condition(ErrorConditionEnum e) noexcept; 91e78f53d1SNikolas Klauser 92e78f53d1SNikolas Klauser // modifiers: 93e78f53d1SNikolas Klauser void assign(int val, const error_category& cat) noexcept; 94e78f53d1SNikolas Klauser template <class ErrorConditionEnum> 95e78f53d1SNikolas Klauser error_condition& operator=(ErrorConditionEnum e) noexcept; 96e78f53d1SNikolas Klauser void clear() noexcept; 97e78f53d1SNikolas Klauser 98e78f53d1SNikolas Klauser // observers: 99e78f53d1SNikolas Klauser int value() const noexcept; 100e78f53d1SNikolas Klauser const error_category& category() const noexcept; 101e78f53d1SNikolas Klauser string message() const noexcept; 102e78f53d1SNikolas Klauser explicit operator bool() const noexcept; 103e78f53d1SNikolas Klauser}; 104e78f53d1SNikolas Klauser 105e78f53d1SNikolas Klauserclass system_error 106e78f53d1SNikolas Klauser : public runtime_error 107e78f53d1SNikolas Klauser{ 108e78f53d1SNikolas Klauserpublic: 109e78f53d1SNikolas Klauser system_error(error_code ec, const string& what_arg); 110e78f53d1SNikolas Klauser system_error(error_code ec, const char* what_arg); 111e78f53d1SNikolas Klauser system_error(error_code ec); 112e78f53d1SNikolas Klauser system_error(int ev, const error_category& ecat, const string& what_arg); 113e78f53d1SNikolas Klauser system_error(int ev, const error_category& ecat, const char* what_arg); 114e78f53d1SNikolas Klauser system_error(int ev, const error_category& ecat); 115e78f53d1SNikolas Klauser 116e78f53d1SNikolas Klauser const error_code& code() const noexcept; 117e78f53d1SNikolas Klauser const char* what() const noexcept; 118e78f53d1SNikolas Klauser}; 119e78f53d1SNikolas Klauser 120e78f53d1SNikolas Klausertemplate <> struct is_error_condition_enum<errc> 121e78f53d1SNikolas Klauser : true_type { } 122e78f53d1SNikolas Klauser 123e78f53d1SNikolas Klausererror_code make_error_code(errc e) noexcept; 124e78f53d1SNikolas Klausererror_condition make_error_condition(errc e) noexcept; 125e78f53d1SNikolas Klauser 126e78f53d1SNikolas Klauser// Comparison operators: 127e78f53d1SNikolas Klauserbool operator==(const error_code& lhs, const error_code& rhs) noexcept; 128e78f53d1SNikolas Klauserbool operator==(const error_code& lhs, const error_condition& rhs) noexcept; 129e78f53d1SNikolas Klauserbool operator==(const error_condition& lhs, const error_code& rhs) noexcept; // removed in C++20 130e78f53d1SNikolas Klauserbool operator==(const error_condition& lhs, const error_condition& rhs) noexcept; 131e78f53d1SNikolas Klauserbool operator!=(const error_code& lhs, const error_code& rhs) noexcept; // removed in C++20 132e78f53d1SNikolas Klauserbool operator!=(const error_code& lhs, const error_condition& rhs) noexcept; // removed in C++20 133e78f53d1SNikolas Klauserbool operator!=(const error_condition& lhs, const error_code& rhs) noexcept; // removed in C++20 134e78f53d1SNikolas Klauserbool operator!=(const error_condition& lhs, const error_condition& rhs) noexcept; // removed in C++20 135e78f53d1SNikolas Klauserbool operator<(const error_condition& lhs, const error_condition& rhs) noexcept; // removed in C++20 136e78f53d1SNikolas Klauserbool operator<(const error_code& lhs, const error_code& rhs) noexcept; // removed in C++20 137e78f53d1SNikolas Klauserstrong_ordering operator<=>(const error_code& lhs, const error_code& rhs) noexcept; // C++20 138e78f53d1SNikolas Klauserstrong_ordering operator<=>(const error_condition& lhs, const error_condition& rhs) noexcept; // C++20 139e78f53d1SNikolas Klauser 140e78f53d1SNikolas Klausertemplate <> struct hash<std::error_code>; 141e78f53d1SNikolas Klausertemplate <> struct hash<std::error_condition>; 142e78f53d1SNikolas Klauser 143e78f53d1SNikolas Klauser} // std 144e78f53d1SNikolas Klauser 145e78f53d1SNikolas Klauser*/ 146e78f53d1SNikolas Klauser 14773fbae83SNikolas Klauser#include <__cxx03/__config> 14873fbae83SNikolas Klauser#include <__cxx03/__system_error/errc.h> 14973fbae83SNikolas Klauser#include <__cxx03/__system_error/error_category.h> 15073fbae83SNikolas Klauser#include <__cxx03/__system_error/error_code.h> 15173fbae83SNikolas Klauser#include <__cxx03/__system_error/error_condition.h> 15273fbae83SNikolas Klauser#include <__cxx03/__system_error/system_error.h> 15373fbae83SNikolas Klauser#include <__cxx03/version> 154e78f53d1SNikolas Klauser 155e78f53d1SNikolas Klauser// standard-mandated includes 156e78f53d1SNikolas Klauser 157e78f53d1SNikolas Klauser// [system.error.syn] 15873fbae83SNikolas Klauser#include <__cxx03/compare> 159e78f53d1SNikolas Klauser 160e78f53d1SNikolas Klauser#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 161e78f53d1SNikolas Klauser# pragma GCC system_header 162e78f53d1SNikolas Klauser#endif 163e78f53d1SNikolas Klauser 164e78f53d1SNikolas Klauser#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 16573fbae83SNikolas Klauser# include <__cxx03/cstdint> 16673fbae83SNikolas Klauser# include <__cxx03/cstring> 16773fbae83SNikolas Klauser# include <__cxx03/limits> 16873fbae83SNikolas Klauser# include <__cxx03/type_traits> 169e78f53d1SNikolas Klauser#endif 170e78f53d1SNikolas Klauser 171*ce777190SNikolas Klauser#endif // _LIBCPP___CXX03_SYSTEM_ERROR 172