File Coverage

/usr/include/c++/5/stdexcept
Criterion Covered Total %
statement 0 1 0.0
branch n/a
condition n/a
subroutine n/a
pod n/a
total 0 1 0.0


line stmt bran cond sub pod time code
1             // Standard exception classes -*- C++ -*-
2              
3             // Copyright (C) 2001-2015 Free Software Foundation, Inc.
4             //
5             // This file is part of the GNU ISO C++ Library. This library is free
6             // software; you can redistribute it and/or modify it under the
7             // terms of the GNU General Public License as published by the
8             // Free Software Foundation; either version 3, or (at your option)
9             // any later version.
10              
11             // This library is distributed in the hope that it will be useful,
12             // but WITHOUT ANY WARRANTY; without even the implied warranty of
13             // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14             // GNU General Public License for more details.
15              
16             // Under Section 7 of GPL version 3, you are granted additional
17             // permissions described in the GCC Runtime Library Exception, version
18             // 3.1, as published by the Free Software Foundation.
19              
20             // You should have received a copy of the GNU General Public License and
21             // a copy of the GCC Runtime Library Exception along with this program;
22             // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23             // .
24              
25             /** @file include/stdexcept
26             * This is a Standard C++ Library header.
27             */
28              
29             //
30             // ISO C++ 19.1 Exception classes
31             //
32              
33             #ifndef _GLIBCXX_STDEXCEPT
34             #define _GLIBCXX_STDEXCEPT 1
35              
36             #pragma GCC system_header
37              
38             #include
39             #include
40              
41             namespace std _GLIBCXX_VISIBILITY(default)
42             {
43             _GLIBCXX_BEGIN_NAMESPACE_VERSION
44              
45             #if _GLIBCXX_USE_DUAL_ABI
46             #if _GLIBCXX_USE_CXX11_ABI
47             // Emulates an old COW string when the new std::string is in use.
48             struct __cow_string
49             {
50             union {
51             const char* _M_p;
52             char _M_bytes[sizeof(const char*)];
53             };
54              
55             __cow_string();
56             __cow_string(const std::string&);
57             __cow_string(const char*, size_t);
58             __cow_string(const __cow_string&) _GLIBCXX_USE_NOEXCEPT;
59             __cow_string& operator=(const __cow_string&) _GLIBCXX_USE_NOEXCEPT;
60             ~__cow_string();
61             #if __cplusplus >= 201103L
62             __cow_string(__cow_string&&) noexcept;
63             __cow_string& operator=(__cow_string&&) noexcept;
64             #endif
65             };
66              
67             typedef basic_string __sso_string;
68             #else // _GLIBCXX_USE_CXX11_ABI
69             typedef basic_string __cow_string;
70              
71             // Emulates a new SSO string when the old std::string is in use.
72             struct __sso_string
73             {
74             struct __str
75             {
76             const char* _M_p;
77             size_t _M_string_length;
78             char _M_local_buf[16];
79             };
80              
81             union {
82             __str _M_s;
83             char _M_bytes[sizeof(__str)];
84             };
85              
86             __sso_string() _GLIBCXX_USE_NOEXCEPT;
87             __sso_string(const std::string&);
88             __sso_string(const char*, size_t);
89             __sso_string(const __sso_string&);
90             __sso_string& operator=(const __sso_string&);
91             ~__sso_string();
92             #if __cplusplus >= 201103L
93             __sso_string(__sso_string&&) noexcept;
94             __sso_string& operator=(__sso_string&&) noexcept;
95             #endif
96             };
97             #endif // _GLIBCXX_USE_CXX11_ABI
98             #else // _GLIBCXX_USE_DUAL_ABI
99             typedef basic_string __sso_string;
100             typedef basic_string __cow_string;
101             #endif
102              
103             /**
104             * @addtogroup exceptions
105             * @{
106             */
107              
108             /** Logic errors represent problems in the internal logic of a program;
109             * in theory, these are preventable, and even detectable before the
110             * program runs (e.g., violations of class invariants).
111             * @brief One of two subclasses of exception.
112             */
113             class logic_error : public exception
114             {
115             __cow_string _M_msg;
116              
117             public:
118             /** Takes a character string describing the error. */
119             explicit
120             logic_error(const string& __arg);
121              
122             #if __cplusplus >= 201103L
123             explicit
124             logic_error(const char*);
125             #endif
126              
127             #if _GLIBCXX_USE_CXX11_ABI || _GLIBCXX_DEFINE_STDEXCEPT_COPY_OPS
128             logic_error(const logic_error&) _GLIBCXX_USE_NOEXCEPT;
129             logic_error& operator=(const logic_error&) _GLIBCXX_USE_NOEXCEPT;
130             #endif
131              
132             virtual ~logic_error() _GLIBCXX_USE_NOEXCEPT;
133              
134             /** Returns a C-style character string describing the general cause of
135             * the current error (the same string passed to the ctor). */
136             virtual const char*
137             what() const _GLIBCXX_USE_NOEXCEPT;
138             };
139              
140             /** Thrown by the library, or by you, to report domain errors (domain in
141             * the mathematical sense). */
142 0           class domain_error : public logic_error
143             {
144             public:
145             explicit domain_error(const string& __arg);
146             #if __cplusplus >= 201103L
147             explicit domain_error(const char*);
148             #endif
149             virtual ~domain_error() _GLIBCXX_USE_NOEXCEPT;
150             };
151              
152             /** Thrown to report invalid arguments to functions. */
153             class invalid_argument : public logic_error
154             {
155             public:
156             explicit invalid_argument(const string& __arg);
157             #if __cplusplus >= 201103L
158             explicit invalid_argument(const char*);
159             #endif
160             virtual ~invalid_argument() _GLIBCXX_USE_NOEXCEPT;
161             };
162              
163             /** Thrown when an object is constructed that would exceed its maximum
164             * permitted size (e.g., a basic_string instance). */
165             class length_error : public logic_error
166             {
167             public:
168             explicit length_error(const string& __arg);
169             #if __cplusplus >= 201103L
170             explicit length_error(const char*);
171             #endif
172             virtual ~length_error() _GLIBCXX_USE_NOEXCEPT;
173             };
174              
175             /** This represents an argument whose value is not within the expected
176             * range (e.g., boundary checks in basic_string). */
177             class out_of_range : public logic_error
178             {
179             public:
180             explicit out_of_range(const string& __arg);
181             #if __cplusplus >= 201103L
182             explicit out_of_range(const char*);
183             #endif
184             virtual ~out_of_range() _GLIBCXX_USE_NOEXCEPT;
185             };
186              
187             /** Runtime errors represent problems outside the scope of a program;
188             * they cannot be easily predicted and can generally only be caught as
189             * the program executes.
190             * @brief One of two subclasses of exception.
191             */
192             class runtime_error : public exception
193             {
194             __cow_string _M_msg;
195              
196             public:
197             /** Takes a character string describing the error. */
198             explicit
199             runtime_error(const string& __arg);
200              
201             #if __cplusplus >= 201103L
202             explicit
203             runtime_error(const char*);
204             #endif
205              
206             #if _GLIBCXX_USE_CXX11_ABI || _GLIBCXX_DEFINE_STDEXCEPT_COPY_OPS
207             runtime_error(const runtime_error&) _GLIBCXX_USE_NOEXCEPT;
208             runtime_error& operator=(const runtime_error&) _GLIBCXX_USE_NOEXCEPT;
209             #endif
210              
211             virtual ~runtime_error() _GLIBCXX_USE_NOEXCEPT;
212              
213             /** Returns a C-style character string describing the general cause of
214             * the current error (the same string passed to the ctor). */
215             virtual const char*
216             what() const _GLIBCXX_USE_NOEXCEPT;
217             };
218              
219             /** Thrown to indicate range errors in internal computations. */
220             class range_error : public runtime_error
221             {
222             public:
223             explicit range_error(const string& __arg);
224             #if __cplusplus >= 201103L
225             explicit range_error(const char*);
226             #endif
227             virtual ~range_error() _GLIBCXX_USE_NOEXCEPT;
228             };
229              
230             /** Thrown to indicate arithmetic overflow. */
231             class overflow_error : public runtime_error
232             {
233             public:
234             explicit overflow_error(const string& __arg);
235             #if __cplusplus >= 201103L
236             explicit overflow_error(const char*);
237             #endif
238             virtual ~overflow_error() _GLIBCXX_USE_NOEXCEPT;
239             };
240              
241             /** Thrown to indicate arithmetic underflow. */
242             class underflow_error : public runtime_error
243             {
244             public:
245             explicit underflow_error(const string& __arg);
246             #if __cplusplus >= 201103L
247             explicit underflow_error(const char*);
248             #endif
249             virtual ~underflow_error() _GLIBCXX_USE_NOEXCEPT;
250             };
251              
252             // @} group exceptions
253              
254             _GLIBCXX_END_NAMESPACE_VERSION
255             } // namespace
256              
257             #endif /* _GLIBCXX_STDEXCEPT */