xref: /llvm-project/libcxx/include/__cxx03/system_error (revision ce7771902dc50d900de639d499a60486b83f70e0)
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