1046d0bdaf01b114e7536a802f3c3dc5862ec5c7bMikhail Glushenkov//===---------------------------- system_error ------------------*- C++ -*-===//
2bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer//
3bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer//                     The LLVM Compiler Infrastructure
4bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer//
5bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// This file is distributed under the University of Illinois Open Source
6bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// License. See LICENSE.TXT for details.
7bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer//
8bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer//===----------------------------------------------------------------------===//
9bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer//
10fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer// This was lifted from libc++ and modified for C++03. This is called
11fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer// system_error even though it does not define that class because that's what
12fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer// it's called in C++0x. We don't define system_error because it is only used
13fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer// for exception handling, which we don't use in LLVM.
14bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer//
15bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer//===----------------------------------------------------------------------===//
16bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
17674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#ifndef LLVM_SUPPORT_SYSTEM_ERROR_H
18674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#define LLVM_SUPPORT_SYSTEM_ERROR_H
19bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
20f630e49efc7bf3f1716b6daab3c2cc11a908754aCraig Topper#include "llvm/Support/Compiler.h"
21f630e49efc7bf3f1716b6daab3c2cc11a908754aCraig Topper
22bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer/*
23bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    system_error synopsis
24bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
25bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencernamespace std
26bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{
27bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
28bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass error_category
29bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{
30bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic:
31bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    virtual ~error_category();
32bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
33bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    error_category(const error_category&) = delete;
34bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    error_category& operator=(const error_category&) = delete;
35bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
36bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    virtual const char* name() const = 0;
37bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    virtual error_condition default_error_condition(int ev) const;
38bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    virtual bool equivalent(int code, const error_condition& condition) const;
39bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    virtual bool equivalent(const error_code& code, int condition) const;
40bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    virtual std::string message(int ev) const = 0;
41bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
42bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    bool operator==(const error_category& rhs) const;
43bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    bool operator!=(const error_category& rhs) const;
44bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    bool operator<(const error_category& rhs) const;
45bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer};
46bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
47bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerconst error_category& generic_category();
48bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerconst error_category& system_category();
49bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
50bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <class T> struct is_error_code_enum
51bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    : public false_type {};
52bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
53bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <class T> struct is_error_condition_enum
54bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    : public false_type {};
55bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
56bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass error_code
57bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{
58bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic:
59bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    // constructors:
60bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    error_code();
61bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    error_code(int val, const error_category& cat);
62bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    template <class ErrorCodeEnum>
63bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer        error_code(ErrorCodeEnum e);
64bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
65bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    // modifiers:
66bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    void assign(int val, const error_category& cat);
67bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    template <class ErrorCodeEnum>
68bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer        error_code& operator=(ErrorCodeEnum e);
69bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    void clear();
70bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
71bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    // observers:
72bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    int value() const;
73bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    const error_category& category() const;
74bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    error_condition default_error_condition() const;
75bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    std::string message() const;
76bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    explicit operator bool() const;
77bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer};
78bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
79bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// non-member functions:
80bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator<(const error_code& lhs, const error_code& rhs);
81bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <class charT, class traits>
82bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    basic_ostream<charT,traits>&
83bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    operator<<(basic_ostream<charT,traits>& os, const error_code& ec);
84bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
85bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass error_condition
86bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{
87bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic:
88bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    // constructors:
89bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    error_condition();
90bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    error_condition(int val, const error_category& cat);
91bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    template <class ErrorConditionEnum>
92bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer        error_condition(ErrorConditionEnum e);
93bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
94bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    // modifiers:
95bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    void assign(int val, const error_category& cat);
96bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    template <class ErrorConditionEnum>
97bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer        error_condition& operator=(ErrorConditionEnum e);
98bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    void clear();
99bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
100bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    // observers:
101bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    int value() const;
102bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    const error_category& category() const;
103bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    std::string message() const;
104bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    explicit operator bool() const;
105bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer};
106bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
107bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator<(const error_condition& lhs, const error_condition& rhs);
108bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
109bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass system_error
110bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    : public runtime_error
111bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{
112bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic:
113bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    system_error(error_code ec, const std::string& what_arg);
114bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    system_error(error_code ec, const char* what_arg);
115bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    system_error(error_code ec);
116bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    system_error(int ev, const error_category& ecat, const std::string& what_arg);
117bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    system_error(int ev, const error_category& ecat, const char* what_arg);
118bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    system_error(int ev, const error_category& ecat);
119bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
120bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    const error_code& code() const throw();
121bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    const char* what() const throw();
122bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer};
123bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
124bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerenum class errc
125bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{
126bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    address_family_not_supported,       // EAFNOSUPPORT
127bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    address_in_use,                     // EADDRINUSE
128bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    address_not_available,              // EADDRNOTAVAIL
129bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    already_connected,                  // EISCONN
130bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    argument_list_too_long,             // E2BIG
131bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    argument_out_of_domain,             // EDOM
132bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    bad_address,                        // EFAULT
133bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    bad_file_descriptor,                // EBADF
134bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    bad_message,                        // EBADMSG
135bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    broken_pipe,                        // EPIPE
136bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    connection_aborted,                 // ECONNABORTED
137bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    connection_already_in_progress,     // EALREADY
138bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    connection_refused,                 // ECONNREFUSED
139bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    connection_reset,                   // ECONNRESET
140bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    cross_device_link,                  // EXDEV
141bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    destination_address_required,       // EDESTADDRREQ
142bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    device_or_resource_busy,            // EBUSY
143bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    directory_not_empty,                // ENOTEMPTY
144bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    executable_format_error,            // ENOEXEC
145bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    file_exists,                        // EEXIST
146bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    file_too_large,                     // EFBIG
147bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    filename_too_long,                  // ENAMETOOLONG
148bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    function_not_supported,             // ENOSYS
149bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    host_unreachable,                   // EHOSTUNREACH
150bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    identifier_removed,                 // EIDRM
151bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    illegal_byte_sequence,              // EILSEQ
152bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    inappropriate_io_control_operation, // ENOTTY
153bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    interrupted,                        // EINTR
154bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    invalid_argument,                   // EINVAL
155bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    invalid_seek,                       // ESPIPE
156bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    io_error,                           // EIO
157bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    is_a_directory,                     // EISDIR
158bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    message_size,                       // EMSGSIZE
159bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    network_down,                       // ENETDOWN
160bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    network_reset,                      // ENETRESET
161bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    network_unreachable,                // ENETUNREACH
162bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    no_buffer_space,                    // ENOBUFS
163bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    no_child_process,                   // ECHILD
164bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    no_link,                            // ENOLINK
165bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    no_lock_available,                  // ENOLCK
166bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    no_message_available,               // ENODATA
167bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    no_message,                         // ENOMSG
168bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    no_protocol_option,                 // ENOPROTOOPT
169bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    no_space_on_device,                 // ENOSPC
170bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    no_stream_resources,                // ENOSR
171bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    no_such_device_or_address,          // ENXIO
172bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    no_such_device,                     // ENODEV
173bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    no_such_file_or_directory,          // ENOENT
174bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    no_such_process,                    // ESRCH
175bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    not_a_directory,                    // ENOTDIR
176bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    not_a_socket,                       // ENOTSOCK
177bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    not_a_stream,                       // ENOSTR
178bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    not_connected,                      // ENOTCONN
179bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    not_enough_memory,                  // ENOMEM
180bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    not_supported,                      // ENOTSUP
181bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    operation_canceled,                 // ECANCELED
182bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    operation_in_progress,              // EINPROGRESS
183bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    operation_not_permitted,            // EPERM
184bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    operation_not_supported,            // EOPNOTSUPP
185bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    operation_would_block,              // EWOULDBLOCK
186bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    owner_dead,                         // EOWNERDEAD
187bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    permission_denied,                  // EACCES
188bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    protocol_error,                     // EPROTO
189bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    protocol_not_supported,             // EPROTONOSUPPORT
190bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    read_only_file_system,              // EROFS
191bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    resource_deadlock_would_occur,      // EDEADLK
192bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    resource_unavailable_try_again,     // EAGAIN
193bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    result_out_of_range,                // ERANGE
194bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    state_not_recoverable,              // ENOTRECOVERABLE
195bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    stream_timeout,                     // ETIME
196bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    text_file_busy,                     // ETXTBSY
197bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    timed_out,                          // ETIMEDOUT
198bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    too_many_files_open_in_system,      // ENFILE
199bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    too_many_files_open,                // EMFILE
200bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    too_many_links,                     // EMLINK
201bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    too_many_symbolic_link_levels,      // ELOOP
202bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    value_too_large,                    // EOVERFLOW
203bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    wrong_protocol_type                 // EPROTOTYPE
204bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer};
205bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
206bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <> struct is_error_condition_enum<errc> : true_type { }
207bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
208bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencererror_code make_error_code(errc e);
209bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencererror_condition make_error_condition(errc e);
210bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
211bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// Comparison operators:
212bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator==(const error_code& lhs, const error_code& rhs);
213bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator==(const error_code& lhs, const error_condition& rhs);
214bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator==(const error_condition& lhs, const error_code& rhs);
215bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator==(const error_condition& lhs, const error_condition& rhs);
216bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator!=(const error_code& lhs, const error_code& rhs);
217bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator!=(const error_code& lhs, const error_condition& rhs);
218bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator!=(const error_condition& lhs, const error_code& rhs);
219bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerbool operator!=(const error_condition& lhs, const error_condition& rhs);
220bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
221bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <> struct hash<std::error_code>;
222bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
223bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}  // std
224bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
225bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer*/
226bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
2274e5885dc0f6aa0d5e095d79996955042d7b82b8dDylan Noblesmith#include "llvm/Config/llvm-config.h"
228bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#include "llvm/Support/type_traits.h"
229bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#include <cerrno>
230bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#include <string>
231bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
232fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer// This must be here instead of a .inc file because it is used in the definition
233fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer// of the enum values below.
23409203ac3dd5fe8a43a26aab589334ed7907afbf8Michael J. Spencer#ifdef LLVM_ON_WIN32
235b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer
236b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer  // The following numbers were taken from VS2010.
237b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EAFNOSUPPORT
23844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EAFNOSUPPORT 102
239b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
240b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EADDRINUSE
24144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EADDRINUSE 100
242b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
243b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EADDRNOTAVAIL
24444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EADDRNOTAVAIL 101
245b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
246b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EISCONN
24744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EISCONN 113
248b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
249b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef E2BIG
25044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define E2BIG 7
251b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
252b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EDOM
25344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EDOM 33
254b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
255b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EFAULT
25644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EFAULT 14
257b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
258b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EBADF
25944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EBADF 9
260b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
261b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EBADMSG
262b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer#   define EBADMSG 104
263b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
264b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EPIPE
26544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EPIPE 32
266b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
267b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ECONNABORTED
26844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ECONNABORTED 106
269b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
270b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EALREADY
27144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EALREADY 103
272b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
273b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ECONNREFUSED
27444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ECONNREFUSED 107
275b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
276b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ECONNRESET
27744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ECONNRESET 108
278b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
279b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EXDEV
28044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EXDEV 18
281b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
282b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EDESTADDRREQ
28344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EDESTADDRREQ 109
284b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
285b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EBUSY
28644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EBUSY 16
287b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
288b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOTEMPTY
28944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENOTEMPTY 41
290b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
291b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOEXEC
29244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENOEXEC 8
293b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
294b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EEXIST
29544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EEXIST 17
296b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
297b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EFBIG
29844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EFBIG 27
299b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
300b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENAMETOOLONG
30144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENAMETOOLONG 38
302b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
303b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOSYS
30444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENOSYS 40
305b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
306b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EHOSTUNREACH
30744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EHOSTUNREACH 110
308b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
309b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EIDRM
310b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer#   define EIDRM 111
311b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
312b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EILSEQ
31344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EILSEQ 42
314b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
315b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOTTY
31644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENOTTY 25
317b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
318b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EINTR
31944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EINTR 4
320b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
321b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EINVAL
32244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EINVAL 22
323b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
324b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ESPIPE
32544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ESPIPE 29
326b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
327b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EIO
32844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EIO 5
329b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
330b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EISDIR
33144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EISDIR 21
332b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
333b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EMSGSIZE
33444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EMSGSIZE 115
335b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
336b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENETDOWN
33744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENETDOWN 116
338b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
339b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENETRESET
34044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENETRESET 117
341b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
342b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENETUNREACH
34344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENETUNREACH 118
344b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
345b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOBUFS
34644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENOBUFS 119
347b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
348b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ECHILD
34944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ECHILD 10
350b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
351b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOLINK
352b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer#   define ENOLINK 121
353b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
354b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOLCK
35544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENOLCK 39
356b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
357b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENODATA
358b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer#   define ENODATA 120
359b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
360b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOMSG
361b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer#   define ENOMSG 122
362b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
363b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOPROTOOPT
36444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENOPROTOOPT 123
365b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
366b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOSPC
36744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENOSPC 28
368b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
369b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOSR
370b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer#   define ENOSR 124
371b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
372b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENXIO
37344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENXIO 6
374b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
375b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENODEV
37644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENODEV 19
377b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
378b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOENT
37944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENOENT 2
380b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
381b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ESRCH
38244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ESRCH 3
383b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
384b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOTDIR
38544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENOTDIR 20
386b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
387b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOTSOCK
38844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENOTSOCK 128
389b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
390b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOSTR
391b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer#   define ENOSTR 125
392b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
393b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOTCONN
39444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENOTCONN 126
395b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
396b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOMEM
39744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENOMEM 12
398b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
399b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOTSUP
400b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer#   define ENOTSUP 129
401b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
402b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ECANCELED
403b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer#   define ECANCELED 105
404b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
405b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EINPROGRESS
40644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EINPROGRESS 112
407b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
408b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EPERM
40944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EPERM 1
410b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
411b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EOPNOTSUPP
41244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EOPNOTSUPP 130
413b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
414b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EWOULDBLOCK
41544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EWOULDBLOCK 140
416b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
417b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EOWNERDEAD
418b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer#   define EOWNERDEAD 133
419b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
420b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EACCES
42144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EACCES 13
422b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
423b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EPROTO
424b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer#   define EPROTO 134
425b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
426b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EPROTONOSUPPORT
42744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EPROTONOSUPPORT 135
428b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
429b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EROFS
43044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EROFS 30
431b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
432b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EDEADLK
43344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EDEADLK 36
434b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
435b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EAGAIN
43644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EAGAIN 11
437b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
438b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ERANGE
43944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ERANGE 34
440b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
441b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENOTRECOVERABLE
442b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer#   define ENOTRECOVERABLE 127
443b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
444b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ETIME
445b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer#   define ETIME 137
446b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
447b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ETXTBSY
448b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer#   define ETXTBSY 139
449b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
450b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ETIMEDOUT
45144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ETIMEDOUT 138
452b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
453b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ENFILE
45444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ENFILE 23
455b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
456b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EMFILE
45744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EMFILE 24
458b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
459b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EMLINK
46044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EMLINK 31
461b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
462b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef ELOOP
46344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define ELOOP 114
464b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
465b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EOVERFLOW
466b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer#   define EOVERFLOW 132
467b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
468b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# ifndef EPROTOTYPE
46944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer#   define EPROTOTYPE 136
470b269ff7267a8a4626a41333d5db1ba930750b903Michael J. Spencer# endif
47109203ac3dd5fe8a43a26aab589334ed7907afbf8Michael J. Spencer#endif
47209203ac3dd5fe8a43a26aab589334ed7907afbf8Michael J. Spencer
473bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencernamespace llvm {
474bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
475bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// is_error_code_enum
476bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
477bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <class Tp> struct is_error_code_enum : public false_type {};
478bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
479bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// is_error_condition_enum
480bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
481bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <class Tp> struct is_error_condition_enum : public false_type {};
482bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
483bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// Some error codes are not present on all platforms, so we provide equivalents
484bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// for them:
485bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
486bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer//enum class errc
487bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerstruct errc {
488bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerenum _ {
489bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  success                             = 0,
490bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  address_family_not_supported        = EAFNOSUPPORT,
491bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  address_in_use                      = EADDRINUSE,
492bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  address_not_available               = EADDRNOTAVAIL,
493bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  already_connected                   = EISCONN,
494bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  argument_list_too_long              = E2BIG,
495bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  argument_out_of_domain              = EDOM,
496bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  bad_address                         = EFAULT,
497bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  bad_file_descriptor                 = EBADF,
498109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#ifdef EBADMSG
499bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  bad_message                         = EBADMSG,
500109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#else
501109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer  bad_message                         = EINVAL,
502109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#endif
503bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  broken_pipe                         = EPIPE,
504bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  connection_aborted                  = ECONNABORTED,
505bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  connection_already_in_progress      = EALREADY,
506bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  connection_refused                  = ECONNREFUSED,
507bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  connection_reset                    = ECONNRESET,
508bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  cross_device_link                   = EXDEV,
509bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  destination_address_required        = EDESTADDRREQ,
510bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  device_or_resource_busy             = EBUSY,
511bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  directory_not_empty                 = ENOTEMPTY,
512bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  executable_format_error             = ENOEXEC,
513bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  file_exists                         = EEXIST,
514bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  file_too_large                      = EFBIG,
515bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  filename_too_long                   = ENAMETOOLONG,
516bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  function_not_supported              = ENOSYS,
517bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  host_unreachable                    = EHOSTUNREACH,
518bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  identifier_removed                  = EIDRM,
519bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  illegal_byte_sequence               = EILSEQ,
520bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  inappropriate_io_control_operation  = ENOTTY,
521bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  interrupted                         = EINTR,
522bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  invalid_argument                    = EINVAL,
523bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  invalid_seek                        = ESPIPE,
524bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  io_error                            = EIO,
525bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  is_a_directory                      = EISDIR,
526bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  message_size                        = EMSGSIZE,
527bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  network_down                        = ENETDOWN,
528bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  network_reset                       = ENETRESET,
529bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  network_unreachable                 = ENETUNREACH,
530bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  no_buffer_space                     = ENOBUFS,
531bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  no_child_process                    = ECHILD,
532109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#ifdef ENOLINK
533bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  no_link                             = ENOLINK,
534109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#else
535109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer  no_link                             = EINVAL,
536109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#endif
537bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  no_lock_available                   = ENOLCK,
538bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#ifdef ENODATA
539bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  no_message_available                = ENODATA,
540bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#else
541bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  no_message_available                = ENOMSG,
542bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#endif
543bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  no_message                          = ENOMSG,
544bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  no_protocol_option                  = ENOPROTOOPT,
545bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  no_space_on_device                  = ENOSPC,
546bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#ifdef ENOSR
547bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  no_stream_resources                 = ENOSR,
548bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#else
549bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  no_stream_resources                 = ENOMEM,
550bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#endif
551bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  no_such_device_or_address           = ENXIO,
552bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  no_such_device                      = ENODEV,
553bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  no_such_file_or_directory           = ENOENT,
554bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  no_such_process                     = ESRCH,
555bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  not_a_directory                     = ENOTDIR,
556bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  not_a_socket                        = ENOTSOCK,
557bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#ifdef ENOSTR
558bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  not_a_stream                        = ENOSTR,
559bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#else
560bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  not_a_stream                        = EINVAL,
561bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#endif
562bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  not_connected                       = ENOTCONN,
563bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  not_enough_memory                   = ENOMEM,
564bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  not_supported                       = ENOTSUP,
565bcc3678a4ac42cd014b94061233c06f5b9c82fa9NAKAMURA Takumi#ifdef ECANCELED
566bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  operation_canceled                  = ECANCELED,
567bcc3678a4ac42cd014b94061233c06f5b9c82fa9NAKAMURA Takumi#else
568bcc3678a4ac42cd014b94061233c06f5b9c82fa9NAKAMURA Takumi  operation_canceled                  = EINVAL,
569bcc3678a4ac42cd014b94061233c06f5b9c82fa9NAKAMURA Takumi#endif
570bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  operation_in_progress               = EINPROGRESS,
571bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  operation_not_permitted             = EPERM,
572bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  operation_not_supported             = EOPNOTSUPP,
573bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  operation_would_block               = EWOULDBLOCK,
574bd61b4b0b7518e5bddf3fd01ebceb1d9780d682dMichael J. Spencer#ifdef EOWNERDEAD
575bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  owner_dead                          = EOWNERDEAD,
576bd61b4b0b7518e5bddf3fd01ebceb1d9780d682dMichael J. Spencer#else
577bd61b4b0b7518e5bddf3fd01ebceb1d9780d682dMichael J. Spencer  owner_dead                          = EINVAL,
578bd61b4b0b7518e5bddf3fd01ebceb1d9780d682dMichael J. Spencer#endif
579bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  permission_denied                   = EACCES,
580109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#ifdef EPROTO
581bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  protocol_error                      = EPROTO,
582109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#else
583109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer  protocol_error                      = EINVAL,
584109f4cbc7f2228f5b3f6ca0ba596beff33ee6b53Michael J. Spencer#endif
585bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  protocol_not_supported              = EPROTONOSUPPORT,
586bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  read_only_file_system               = EROFS,
587bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  resource_deadlock_would_occur       = EDEADLK,
588bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  resource_unavailable_try_again      = EAGAIN,
589bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  result_out_of_range                 = ERANGE,
590bd61b4b0b7518e5bddf3fd01ebceb1d9780d682dMichael J. Spencer#ifdef ENOTRECOVERABLE
591bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  state_not_recoverable               = ENOTRECOVERABLE,
592bd61b4b0b7518e5bddf3fd01ebceb1d9780d682dMichael J. Spencer#else
593bd61b4b0b7518e5bddf3fd01ebceb1d9780d682dMichael J. Spencer  state_not_recoverable               = EINVAL,
594bd61b4b0b7518e5bddf3fd01ebceb1d9780d682dMichael J. Spencer#endif
595bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#ifdef ETIME
596bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  stream_timeout                      = ETIME,
597bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#else
598bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  stream_timeout                      = ETIMEDOUT,
599bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#endif
600bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  text_file_busy                      = ETXTBSY,
601bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  timed_out                           = ETIMEDOUT,
602bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  too_many_files_open_in_system       = ENFILE,
603bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  too_many_files_open                 = EMFILE,
604bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  too_many_links                      = EMLINK,
605bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  too_many_symbolic_link_levels       = ELOOP,
606bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  value_too_large                     = EOVERFLOW,
607bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  wrong_protocol_type                 = EPROTOTYPE
608bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer};
609bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
610bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  _ v_;
611bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
612bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  errc(_ v) : v_(v) {}
613bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  operator int() const {return v_;}
614bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer};
615bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
616bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <> struct is_error_condition_enum<errc> : true_type { };
617bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
618bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <> struct is_error_condition_enum<errc::_> : true_type { };
619bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
620bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass error_condition;
621bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass error_code;
622bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
623bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// class error_category
624bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
625bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass _do_message;
626bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
627bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass error_category
628bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{
629bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic:
630bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  virtual ~error_category();
631bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
632bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerprivate:
633bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  error_category();
634f630e49efc7bf3f1716b6daab3c2cc11a908754aCraig Topper  error_category(const error_category&) LLVM_DELETED_FUNCTION;
635f630e49efc7bf3f1716b6daab3c2cc11a908754aCraig Topper  error_category& operator=(const error_category&) LLVM_DELETED_FUNCTION;
636bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
637bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic:
638bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  virtual const char* name() const = 0;
639bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  virtual error_condition default_error_condition(int _ev) const;
640bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  virtual bool equivalent(int _code, const error_condition& _condition) const;
641bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  virtual bool equivalent(const error_code& _code, int _condition) const;
642bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  virtual std::string message(int _ev) const = 0;
643bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
644bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  bool operator==(const error_category& _rhs) const {return this == &_rhs;}
645bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
646bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  bool operator!=(const error_category& _rhs) const {return !(*this == _rhs);}
647bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
648bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  bool operator< (const error_category& _rhs) const {return this < &_rhs;}
649bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
650bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  friend class _do_message;
651bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer};
652bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
653bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass _do_message : public error_category
654bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{
655bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic:
656a96a1824747632ce87ef065b4a13fb777d2b14d6Craig Topper  virtual std::string message(int ev) const LLVM_OVERRIDE;
657bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer};
658bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
659bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerconst error_category& generic_category();
660bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerconst error_category& system_category();
661bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
662333fb04506233255f10d8095c9e2de5e5f0fdc6fMichael J. Spencer/// Get the error_category used for errno values from POSIX functions. This is
663cbda61a468b4a2b33a54781d65023da7d9c8d291Michael J. Spencer/// the same as the system_category on POSIX systems, but is the same as the
664333fb04506233255f10d8095c9e2de5e5f0fdc6fMichael J. Spencer/// generic_category on Windows.
665333fb04506233255f10d8095c9e2de5e5f0fdc6fMichael J. Spencerconst error_category& posix_category();
666333fb04506233255f10d8095c9e2de5e5f0fdc6fMichael J. Spencer
667bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass error_condition
668bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer{
669bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  int _val_;
670bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  const error_category* _cat_;
671bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic:
672bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  error_condition() : _val_(0), _cat_(&generic_category()) {}
673bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
674bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  error_condition(int _val, const error_category& _cat)
675bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    : _val_(_val), _cat_(&_cat) {}
676bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
677bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  template <class E>
678bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  error_condition(E _e, typename enable_if_c<
679bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer                          is_error_condition_enum<E>::value
680bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer                        >::type* = 0)
681bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    {*this = make_error_condition(_e);}
682bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
683bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  void assign(int _val, const error_category& _cat) {
684bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    _val_ = _val;
685bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    _cat_ = &_cat;
686bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  }
687bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
688bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  template <class E>
689bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    typename enable_if_c
690bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    <
691bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer      is_error_condition_enum<E>::value,
692bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer      error_condition&
693bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    >::type
694bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    operator=(E _e)
695bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer      {*this = make_error_condition(_e); return *this;}
696bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
697bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  void clear() {
698bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    _val_ = 0;
699bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    _cat_ = &generic_category();
700bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  }
701bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
702bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  int value() const {return _val_;}
703bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
704bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  const error_category& category() const {return *_cat_;}
705bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  std::string message() const;
706bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
707da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer  typedef void (*unspecified_bool_type)();
708da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer  static void unspecified_bool_true() {}
709da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer
710da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer  operator unspecified_bool_type() const { // true if error
711da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer    return _val_ == 0 ? 0 : unspecified_bool_true;
712da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer  }
713bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer};
714bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
715bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline error_condition make_error_condition(errc _e) {
716bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  return error_condition(static_cast<int>(_e), generic_category());
717bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}
718bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
719bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator<(const error_condition& _x, const error_condition& _y) {
720bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  return _x.category() < _y.category()
721fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer      || (_x.category() == _y.category() && _x.value() < _y.value());
722bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}
723bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
724bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer// error_code
725bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
726bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerclass error_code {
727bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  int _val_;
728bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  const error_category* _cat_;
729bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerpublic:
730bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  error_code() : _val_(0), _cat_(&system_category()) {}
731bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
73258604cd944eec4a75046076cb53eb708aaf2ee09David Blaikie  static error_code success() {
73358604cd944eec4a75046076cb53eb708aaf2ee09David Blaikie    return error_code();
73458604cd944eec4a75046076cb53eb708aaf2ee09David Blaikie  }
73558604cd944eec4a75046076cb53eb708aaf2ee09David Blaikie
736bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  error_code(int _val, const error_category& _cat)
737bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    : _val_(_val), _cat_(&_cat) {}
738bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
739bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  template <class E>
740bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  error_code(E _e, typename enable_if_c<
741bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer                     is_error_code_enum<E>::value
742bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer                   >::type* = 0) {
743bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    *this = make_error_code(_e);
744bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  }
745bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
746bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  void assign(int _val, const error_category& _cat) {
747bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer      _val_ = _val;
748bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer      _cat_ = &_cat;
749bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  }
750bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
751bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  template <class E>
752bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    typename enable_if_c
753bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    <
754bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer      is_error_code_enum<E>::value,
755bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer      error_code&
756bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    >::type
757bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    operator=(E _e)
758bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer      {*this = make_error_code(_e); return *this;}
759bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
760bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  void clear() {
761bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    _val_ = 0;
762bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    _cat_ = &system_category();
763bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  }
764bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
765bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  int value() const {return _val_;}
766bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
767bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  const error_category& category() const {return *_cat_;}
768bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
769bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  error_condition default_error_condition() const
770bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer    {return _cat_->default_error_condition(_val_);}
771bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
772bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  std::string message() const;
773bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
774da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer  typedef void (*unspecified_bool_type)();
775da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer  static void unspecified_bool_true() {}
776da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer
777da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer  operator unspecified_bool_type() const { // true if error
778da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer    return _val_ == 0 ? 0 : unspecified_bool_true;
779da3aaffcbb202ac492e7643fc0b191eca1931ab3Michael J. Spencer  }
780bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer};
781bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
782bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline error_code make_error_code(errc _e) {
783bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  return error_code(static_cast<int>(_e), generic_category());
784bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}
785bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
786bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator<(const error_code& _x, const error_code& _y) {
787bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  return _x.category() < _y.category()
788fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer      || (_x.category() == _y.category() && _x.value() < _y.value());
789bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}
790bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
791bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator==(const error_code& _x, const error_code& _y) {
792bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  return _x.category() == _y.category() && _x.value() == _y.value();
793bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}
794bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
795bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator==(const error_code& _x, const error_condition& _y) {
796bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  return _x.category().equivalent(_x.value(), _y)
797bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer      || _y.category().equivalent(_x, _y.value());
798bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}
799bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
800bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator==(const error_condition& _x, const error_code& _y) {
801bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  return _y == _x;
802bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}
803bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
804bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator==(const error_condition& _x, const error_condition& _y) {
805bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer   return _x.category() == _y.category() && _x.value() == _y.value();
806bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}
807bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
808bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator!=(const error_code& _x, const error_code& _y) {
809bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  return !(_x == _y);
810bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}
811bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
812bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator!=(const error_code& _x, const error_condition& _y) {
813bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  return !(_x == _y);
814bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}
815bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
816bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator!=(const error_condition& _x, const error_code& _y) {
817bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  return !(_x == _y);
818bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}
819bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
820bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline bool operator!=(const error_condition& _x, const error_condition& _y) {
821bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  return !(_x == _y);
822bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}
823bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
82444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer// Windows errors.
825bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
826fae76d0734562b6422c51fe3207cca8a51666323Michael J. Spencer//  To construct an error_code after an API error:
827bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer//
828bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer//      error_code( ::GetLastError(), system_category() )
829bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerstruct windows_error {
830bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerenum _ {
831bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  success = 0,
83244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  // These names and values are based on Windows WinError.h
83344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  // This is not a complete list. Add to this list if you need to explicitly
83444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  // check for it.
83544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  invalid_function        = 1, // ERROR_INVALID_FUNCTION,
83644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  file_not_found          = 2, // ERROR_FILE_NOT_FOUND,
83744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  path_not_found          = 3, // ERROR_PATH_NOT_FOUND,
83844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  too_many_open_files     = 4, // ERROR_TOO_MANY_OPEN_FILES,
83944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  access_denied           = 5, // ERROR_ACCESS_DENIED,
84044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  invalid_handle          = 6, // ERROR_INVALID_HANDLE,
84144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  arena_trashed           = 7, // ERROR_ARENA_TRASHED,
84244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  not_enough_memory       = 8, // ERROR_NOT_ENOUGH_MEMORY,
84344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  invalid_block           = 9, // ERROR_INVALID_BLOCK,
84444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  bad_environment         = 10, // ERROR_BAD_ENVIRONMENT,
84544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  bad_format              = 11, // ERROR_BAD_FORMAT,
84644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  invalid_access          = 12, // ERROR_INVALID_ACCESS,
84744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  outofmemory             = 14, // ERROR_OUTOFMEMORY,
84844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  invalid_drive           = 15, // ERROR_INVALID_DRIVE,
84944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  current_directory       = 16, // ERROR_CURRENT_DIRECTORY,
85044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  not_same_device         = 17, // ERROR_NOT_SAME_DEVICE,
85144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  no_more_files           = 18, // ERROR_NO_MORE_FILES,
85244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  write_protect           = 19, // ERROR_WRITE_PROTECT,
85344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  bad_unit                = 20, // ERROR_BAD_UNIT,
85444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  not_ready               = 21, // ERROR_NOT_READY,
85544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  bad_command             = 22, // ERROR_BAD_COMMAND,
85644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  crc                     = 23, // ERROR_CRC,
85744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  bad_length              = 24, // ERROR_BAD_LENGTH,
85844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  seek                    = 25, // ERROR_SEEK,
85944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  not_dos_disk            = 26, // ERROR_NOT_DOS_DISK,
86044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  sector_not_found        = 27, // ERROR_SECTOR_NOT_FOUND,
86144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  out_of_paper            = 28, // ERROR_OUT_OF_PAPER,
86244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  write_fault             = 29, // ERROR_WRITE_FAULT,
86344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  read_fault              = 30, // ERROR_READ_FAULT,
86444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  gen_failure             = 31, // ERROR_GEN_FAILURE,
86544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  sharing_violation       = 32, // ERROR_SHARING_VIOLATION,
86644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  lock_violation          = 33, // ERROR_LOCK_VIOLATION,
86744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  wrong_disk              = 34, // ERROR_WRONG_DISK,
86844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  sharing_buffer_exceeded = 36, // ERROR_SHARING_BUFFER_EXCEEDED,
86944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  handle_eof              = 38, // ERROR_HANDLE_EOF,
87044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  handle_disk_full        = 39, // ERROR_HANDLE_DISK_FULL,
87144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  rem_not_list            = 51, // ERROR_REM_NOT_LIST,
87244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  dup_name                = 52, // ERROR_DUP_NAME,
87344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  bad_net_path            = 53, // ERROR_BAD_NETPATH,
87444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  network_busy            = 54, // ERROR_NETWORK_BUSY,
87544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  file_exists             = 80, // ERROR_FILE_EXISTS,
87644c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  cannot_make             = 82, // ERROR_CANNOT_MAKE,
87744c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  broken_pipe             = 109, // ERROR_BROKEN_PIPE,
87844c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  open_failed             = 110, // ERROR_OPEN_FAILED,
87944c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  buffer_overflow         = 111, // ERROR_BUFFER_OVERFLOW,
88044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  disk_full               = 112, // ERROR_DISK_FULL,
88144c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  insufficient_buffer     = 122, // ERROR_INSUFFICIENT_BUFFER,
88244c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  lock_failed             = 167, // ERROR_LOCK_FAILED,
88344c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  busy                    = 170, // ERROR_BUSY,
88444c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  cancel_violation        = 173, // ERROR_CANCEL_VIOLATION,
88544c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  already_exists          = 183  // ERROR_ALREADY_EXISTS
886bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer};
887bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  _ v_;
888bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
889bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  windows_error(_ v) : v_(v) {}
89044c1bc14570e77630b5e6711ed42886aad848086Michael J. Spencer  explicit windows_error(int v) : v_(_(v)) {}
891bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  operator int() const {return v_;}
892bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer};
893bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
894bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
895bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <> struct is_error_code_enum<windows_error> : true_type { };
896bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
897bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencertemplate <> struct is_error_code_enum<windows_error::_> : true_type { };
898bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
899bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencerinline error_code make_error_code(windows_error e) {
900bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer  return error_code(static_cast<int>(e), system_category());
901bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer}
902bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
903bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer} // end namespace llvm
904bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer
905bbb9ea7b70971df53eedfb42fc9cb606f815eaaaMichael J. Spencer#endif
906