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 17namespace std 18{ 19 20class logic_error; 21 class domain_error; 22 class invalid_argument; 23 class length_error; 24 class out_of_range; 25class runtime_error; 26 class range_error; 27 class overflow_error; 28 class underflow_error; 29 30for each class xxx_error: 31 32class xxx_error : public exception // at least indirectly 33{ 34public: 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 53namespace std // purposefully not using versioning namespace 54{ 55 56class _LIBCPP_EXCEPTION_ABI logic_error 57 : public exception 58{ 59private: 60 void* __imp_; 61public: 62 explicit logic_error(const string&); 63 explicit logic_error(const char*); 64 65 logic_error(const logic_error&) _NOEXCEPT; 66 logic_error& operator=(const logic_error&) _NOEXCEPT; 67 68 virtual ~logic_error() _NOEXCEPT; 69 70 virtual const char* what() const _NOEXCEPT; 71}; 72 73class _LIBCPP_EXCEPTION_ABI runtime_error 74 : public exception 75{ 76private: 77 void* __imp_; 78public: 79 explicit runtime_error(const string&); 80 explicit runtime_error(const char*); 81 82 runtime_error(const runtime_error&) _NOEXCEPT; 83 runtime_error& operator=(const runtime_error&) _NOEXCEPT; 84 85 virtual ~runtime_error() _NOEXCEPT; 86 87 virtual const char* what() const _NOEXCEPT; 88}; 89 90class _LIBCPP_EXCEPTION_ABI domain_error 91 : public logic_error 92{ 93public: 94 _LIBCPP_INLINE_VISIBILITY explicit domain_error(const string& __s) : logic_error(__s) {} 95 _LIBCPP_INLINE_VISIBILITY explicit domain_error(const char* __s) : logic_error(__s) {} 96 97 virtual ~domain_error() _NOEXCEPT; 98}; 99 100class _LIBCPP_EXCEPTION_ABI invalid_argument 101 : public logic_error 102{ 103public: 104 _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const string& __s) : logic_error(__s) {} 105 _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const char* __s) : logic_error(__s) {} 106 107 virtual ~invalid_argument() _NOEXCEPT; 108}; 109 110class _LIBCPP_EXCEPTION_ABI length_error 111 : public logic_error 112{ 113public: 114 _LIBCPP_INLINE_VISIBILITY explicit length_error(const string& __s) : logic_error(__s) {} 115 _LIBCPP_INLINE_VISIBILITY explicit length_error(const char* __s) : logic_error(__s) {} 116 117 virtual ~length_error() _NOEXCEPT; 118}; 119 120class _LIBCPP_EXCEPTION_ABI out_of_range 121 : public logic_error 122{ 123public: 124 _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const string& __s) : logic_error(__s) {} 125 _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const char* __s) : logic_error(__s) {} 126 127 virtual ~out_of_range() _NOEXCEPT; 128}; 129 130class _LIBCPP_EXCEPTION_ABI range_error 131 : public runtime_error 132{ 133public: 134 _LIBCPP_INLINE_VISIBILITY explicit range_error(const string& __s) : runtime_error(__s) {} 135 _LIBCPP_INLINE_VISIBILITY explicit range_error(const char* __s) : runtime_error(__s) {} 136 137 virtual ~range_error() _NOEXCEPT; 138}; 139 140class _LIBCPP_EXCEPTION_ABI overflow_error 141 : public runtime_error 142{ 143public: 144 _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const string& __s) : runtime_error(__s) {} 145 _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const char* __s) : runtime_error(__s) {} 146 147 virtual ~overflow_error() _NOEXCEPT; 148}; 149 150class _LIBCPP_EXCEPTION_ABI underflow_error 151 : public runtime_error 152{ 153public: 154 _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const string& __s) : runtime_error(__s) {} 155 _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const char* __s) : runtime_error(__s) {} 156 157 virtual ~underflow_error() _NOEXCEPT; 158}; 159 160} // std 161 162#endif // _LIBCPP_STDEXCEPT 163