1// Standard exception classes -*- C++ -*-
2
3// Copyright (C) 2001-2014 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// <http://www.gnu.org/licenses/>.
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 <exception>
39#include <string>
40
41namespace std _GLIBCXX_VISIBILITY(default)
42{
43_GLIBCXX_BEGIN_NAMESPACE_VERSION
44
45 /**
46 * @addtogroup exceptions
47 * @{
48 */
49
50 /** Logic errors represent problems in the internal logic of a program;
51 * in theory, these are preventable, and even detectable before the
52 * program runs (e.g., violations of class invariants).
53 * @brief One of two subclasses of exception.
54 */
55 class logic_error : public exception
56 {
57 string _M_msg;
58
59 public:
60 /** Takes a character string describing the error. */
61 explicit
62 logic_error(const string& __arg);
63
64 virtual ~logic_error() _GLIBCXX_USE_NOEXCEPT;
65
66 /** Returns a C-style character string describing the general cause of
67 * the current error (the same string passed to the ctor). */
68 virtual const char*
69 what() const _GLIBCXX_USE_NOEXCEPT;
70 };
71
72 /** Thrown by the library, or by you, to report domain errors (domain in
73 * the mathematical sense). */
74 class domain_error : public logic_error
75 {
76 public:
77 explicit domain_error(const string& __arg);
78 virtual ~domain_error() _GLIBCXX_USE_NOEXCEPT;
79 };
80
81 /** Thrown to report invalid arguments to functions. */
82 class invalid_argument : public logic_error
83 {
84 public:
85 explicit invalid_argument(const string& __arg);
86 virtual ~invalid_argument() _GLIBCXX_USE_NOEXCEPT;
87 };
88
89 /** Thrown when an object is constructed that would exceed its maximum
90 * permitted size (e.g., a basic_string instance). */
91 class length_error : public logic_error
92 {
93 public:
94 explicit length_error(const string& __arg);
95 virtual ~length_error() _GLIBCXX_USE_NOEXCEPT;
96 };
97
98 /** This represents an argument whose value is not within the expected
99 * range (e.g., boundary checks in basic_string). */
100 class out_of_range : public logic_error
101 {
102 public:
103 explicit out_of_range(const string& __arg);
104 virtual ~out_of_range() _GLIBCXX_USE_NOEXCEPT;
105 };
106
107 /** Runtime errors represent problems outside the scope of a program;
108 * they cannot be easily predicted and can generally only be caught as
109 * the program executes.
110 * @brief One of two subclasses of exception.
111 */
112 class runtime_error : public exception
113 {
114 string _M_msg;
115
116 public:
117 /** Takes a character string describing the error. */
118 explicit
119 runtime_error(const string& __arg);
120
121 virtual ~runtime_error() _GLIBCXX_USE_NOEXCEPT;
122
123 /** Returns a C-style character string describing the general cause of
124 * the current error (the same string passed to the ctor). */
125 virtual const char*
126 what() const _GLIBCXX_USE_NOEXCEPT;
127 };
128
129 /** Thrown to indicate range errors in internal computations. */
130 class range_error : public runtime_error
131 {
132 public:
133 explicit range_error(const string& __arg);
134 virtual ~range_error() _GLIBCXX_USE_NOEXCEPT;
135 };
136
137 /** Thrown to indicate arithmetic overflow. */
138 class overflow_error : public runtime_error
139 {
140 public:
141 explicit overflow_error(const string& __arg);
142 virtual ~overflow_error() _GLIBCXX_USE_NOEXCEPT;
143 };
144
145 /** Thrown to indicate arithmetic underflow. */
146 class underflow_error : public runtime_error
147 {
148 public:
149 explicit underflow_error(const string& __arg);
150 virtual ~underflow_error() _GLIBCXX_USE_NOEXCEPT;
151 };
152
153 // @} group exceptions
154
155_GLIBCXX_END_NAMESPACE_VERSION
156} // namespace
157
158#endif /* _GLIBCXX_STDEXCEPT */
159