]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/libc++/include/stdexcept
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / libc++ / include / stdexcept
1 // -*- C++ -*-
2 //===--------------------------- stdexcept --------------------------------===//
3 //
4 //                     The LLVM Compiler Infrastructure
5 //
6 // This file is dual licensed under the MIT and the University of Illinois Open
7 // Source Licenses. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
10
11 #ifndef _LIBCPP_STDEXCEPT
12 #define _LIBCPP_STDEXCEPT
13
14 /*
15     stdexcept synopsis
16
17 namespace std
18 {
19
20 class logic_error;
21     class domain_error;
22     class invalid_argument;
23     class length_error;
24     class out_of_range;
25 class runtime_error;
26     class range_error;
27     class overflow_error;
28     class underflow_error;
29
30 for each class xxx_error:
31
32 class xxx_error : public exception // at least indirectly
33 {
34 public:
35     explicit xxx_error(const string& what_arg);
36     explicit xxx_error(const char*   what_arg);
37
38     virtual const char* what() const noexcept // returns what_arg
39 };
40
41 }  // std
42
43 */
44
45 #include <__config>
46 #include <exception>
47 #include <iosfwd>  // for string forward decl
48
49 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
50 #pragma GCC system_header
51 #endif
52
53 #ifndef _LIBCPP___REFSTRING
54 _LIBCPP_BEGIN_NAMESPACE_STD
55 class _LIBCPP_HIDDEN __libcpp_refstring {
56     const char *__imp_ _LIBCPP_UNUSED;
57 };
58 _LIBCPP_END_NAMESPACE_STD
59 #endif
60
61 namespace std  // purposefully not using versioning namespace
62 {
63
64 class _LIBCPP_EXCEPTION_ABI logic_error
65     : public exception
66 {
67 private:
68     _VSTD::__libcpp_refstring __imp_;
69 public:
70     explicit logic_error(const string&);
71     explicit logic_error(const char*);
72
73     logic_error(const logic_error&) _NOEXCEPT;
74     logic_error& operator=(const logic_error&) _NOEXCEPT;
75
76     virtual ~logic_error() _NOEXCEPT;
77
78     virtual const char* what() const _NOEXCEPT;
79 };
80
81 class _LIBCPP_EXCEPTION_ABI runtime_error
82     : public exception
83 {
84 private:
85     _VSTD::__libcpp_refstring __imp_;
86 public:
87     explicit runtime_error(const string&);
88     explicit runtime_error(const char*);
89
90     runtime_error(const runtime_error&) _NOEXCEPT;
91     runtime_error& operator=(const runtime_error&) _NOEXCEPT;
92
93     virtual ~runtime_error() _NOEXCEPT;
94
95     virtual const char* what() const _NOEXCEPT;
96 };
97
98 class _LIBCPP_EXCEPTION_ABI domain_error
99     : public logic_error
100 {
101 public:
102     _LIBCPP_INLINE_VISIBILITY explicit domain_error(const string& __s) : logic_error(__s) {}
103     _LIBCPP_INLINE_VISIBILITY explicit domain_error(const char* __s)   : logic_error(__s) {}
104
105     virtual ~domain_error() _NOEXCEPT;
106 };
107
108 class _LIBCPP_EXCEPTION_ABI invalid_argument
109     : public logic_error
110 {
111 public:
112     _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const string& __s) : logic_error(__s) {}
113     _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const char* __s)   : logic_error(__s) {}
114
115     virtual ~invalid_argument() _NOEXCEPT;
116 };
117
118 class _LIBCPP_EXCEPTION_ABI length_error
119     : public logic_error
120 {
121 public:
122     _LIBCPP_INLINE_VISIBILITY explicit length_error(const string& __s) : logic_error(__s) {}
123     _LIBCPP_INLINE_VISIBILITY explicit length_error(const char* __s)   : logic_error(__s) {}
124
125     virtual ~length_error() _NOEXCEPT;
126 };
127
128 class _LIBCPP_EXCEPTION_ABI out_of_range
129     : public logic_error
130 {
131 public:
132     _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const string& __s) : logic_error(__s) {}
133     _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const char* __s)   : logic_error(__s) {}
134
135     virtual ~out_of_range() _NOEXCEPT;
136 };
137
138 class _LIBCPP_EXCEPTION_ABI range_error
139     : public runtime_error
140 {
141 public:
142     _LIBCPP_INLINE_VISIBILITY explicit range_error(const string& __s) : runtime_error(__s) {}
143     _LIBCPP_INLINE_VISIBILITY explicit range_error(const char* __s)   : runtime_error(__s) {}
144
145     virtual ~range_error() _NOEXCEPT;
146 };
147
148 class _LIBCPP_EXCEPTION_ABI overflow_error
149     : public runtime_error
150 {
151 public:
152     _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const string& __s) : runtime_error(__s) {}
153     _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const char* __s)   : runtime_error(__s) {}
154
155     virtual ~overflow_error() _NOEXCEPT;
156 };
157
158 class _LIBCPP_EXCEPTION_ABI underflow_error
159     : public runtime_error
160 {
161 public:
162     _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const string& __s) : runtime_error(__s) {}
163     _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const char* __s)   : runtime_error(__s) {}
164
165     virtual ~underflow_error() _NOEXCEPT;
166 };
167
168 }  // std
169
170 #endif  // _LIBCPP_STDEXCEPT