13e519524SHoward Hinnant// -*- C++ -*- 23e519524SHoward Hinnant//===--------------------------- stdexcept --------------------------------===// 33e519524SHoward Hinnant// 45b08a8a4SHoward Hinnant// The LLVM Compiler Infrastructure 53e519524SHoward Hinnant// 6412dbebeSHoward Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 7412dbebeSHoward Hinnant// Source Licenses. See LICENSE.TXT for details. 83e519524SHoward Hinnant// 93e519524SHoward Hinnant//===----------------------------------------------------------------------===// 103e519524SHoward Hinnant 113e519524SHoward Hinnant#ifndef _LIBCPP_STDEXCEPT 123e519524SHoward Hinnant#define _LIBCPP_STDEXCEPT 133e519524SHoward Hinnant 143e519524SHoward Hinnant/* 153e519524SHoward Hinnant stdexcept synopsis 163e519524SHoward Hinnant 173e519524SHoward Hinnantnamespace std 183e519524SHoward Hinnant{ 193e519524SHoward Hinnant 203e519524SHoward Hinnantclass logic_error; 213e519524SHoward Hinnant class domain_error; 223e519524SHoward Hinnant class invalid_argument; 233e519524SHoward Hinnant class length_error; 243e519524SHoward Hinnant class out_of_range; 253e519524SHoward Hinnantclass runtime_error; 263e519524SHoward Hinnant class range_error; 273e519524SHoward Hinnant class overflow_error; 283e519524SHoward Hinnant class underflow_error; 293e519524SHoward Hinnant 303e519524SHoward Hinnantfor each class xxx_error: 313e519524SHoward Hinnant 323e519524SHoward Hinnantclass xxx_error : public exception // at least indirectly 333e519524SHoward Hinnant{ 343e519524SHoward Hinnantpublic: 353e519524SHoward Hinnant explicit xxx_error(const string& what_arg); 36a62f2899SHoward Hinnant explicit xxx_error(const char* what_arg); 373e519524SHoward Hinnant 38a62f2899SHoward Hinnant virtual const char* what() const noexcept // returns what_arg 393e519524SHoward Hinnant}; 403e519524SHoward Hinnant 413e519524SHoward Hinnant} // std 423e519524SHoward Hinnant 433e519524SHoward Hinnant*/ 443e519524SHoward Hinnant 453e519524SHoward Hinnant#include <__config> 463e519524SHoward Hinnant#include <exception> 473e519524SHoward Hinnant#include <iosfwd> // for string forward decl 483e519524SHoward Hinnant 49073458b1SHoward Hinnant#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 503e519524SHoward Hinnant#pragma GCC system_header 51073458b1SHoward Hinnant#endif 523e519524SHoward Hinnant 53a1fbf345SJoerg Sonnenberger#ifndef _LIBCPP___REFSTRING 54a1fbf345SJoerg Sonnenberger_LIBCPP_BEGIN_NAMESPACE_STD 55a1fbf345SJoerg Sonnenbergerclass _LIBCPP_HIDDEN __libcpp_refstring { 5689dd1dd2SEric Fiselier#ifdef __clang__ 5789dd1dd2SEric Fiselier const char *__imp_ __attribute__((__unused__)); // only clang emits a warning 5889dd1dd2SEric Fiselier#else 5989dd1dd2SEric Fiselier const char *__imp_; 6089dd1dd2SEric Fiselier#endif 61a1fbf345SJoerg Sonnenberger}; 62a1fbf345SJoerg Sonnenberger_LIBCPP_END_NAMESPACE_STD 63a1fbf345SJoerg Sonnenberger#endif 64a1fbf345SJoerg Sonnenberger 653e519524SHoward Hinnantnamespace std // purposefully not using versioning namespace 663e519524SHoward Hinnant{ 673e519524SHoward Hinnant 683e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI logic_error 693e519524SHoward Hinnant : public exception 703e519524SHoward Hinnant{ 713e519524SHoward Hinnantprivate: 72a1fbf345SJoerg Sonnenberger _VSTD::__libcpp_refstring __imp_; 733e519524SHoward Hinnantpublic: 743e519524SHoward Hinnant explicit logic_error(const string&); 753e519524SHoward Hinnant explicit logic_error(const char*); 763e519524SHoward Hinnant 77a62f2899SHoward Hinnant logic_error(const logic_error&) _NOEXCEPT; 78a62f2899SHoward Hinnant logic_error& operator=(const logic_error&) _NOEXCEPT; 793e519524SHoward Hinnant 80a62f2899SHoward Hinnant virtual ~logic_error() _NOEXCEPT; 813e519524SHoward Hinnant 82a62f2899SHoward Hinnant virtual const char* what() const _NOEXCEPT; 833e519524SHoward Hinnant}; 843e519524SHoward Hinnant 853e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI runtime_error 863e519524SHoward Hinnant : public exception 873e519524SHoward Hinnant{ 883e519524SHoward Hinnantprivate: 89a1fbf345SJoerg Sonnenberger _VSTD::__libcpp_refstring __imp_; 903e519524SHoward Hinnantpublic: 913e519524SHoward Hinnant explicit runtime_error(const string&); 923e519524SHoward Hinnant explicit runtime_error(const char*); 933e519524SHoward Hinnant 94a62f2899SHoward Hinnant runtime_error(const runtime_error&) _NOEXCEPT; 95a62f2899SHoward Hinnant runtime_error& operator=(const runtime_error&) _NOEXCEPT; 963e519524SHoward Hinnant 97a62f2899SHoward Hinnant virtual ~runtime_error() _NOEXCEPT; 983e519524SHoward Hinnant 99a62f2899SHoward Hinnant virtual const char* what() const _NOEXCEPT; 1003e519524SHoward Hinnant}; 1013e519524SHoward Hinnant 1023e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI domain_error 1033e519524SHoward Hinnant : public logic_error 1043e519524SHoward Hinnant{ 1053e519524SHoward Hinnantpublic: 1063e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit domain_error(const string& __s) : logic_error(__s) {} 1073e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit domain_error(const char* __s) : logic_error(__s) {} 1083e519524SHoward Hinnant 109a62f2899SHoward Hinnant virtual ~domain_error() _NOEXCEPT; 1103e519524SHoward Hinnant}; 1113e519524SHoward Hinnant 1123e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI invalid_argument 1133e519524SHoward Hinnant : public logic_error 1143e519524SHoward Hinnant{ 1153e519524SHoward Hinnantpublic: 1163e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const string& __s) : logic_error(__s) {} 1173e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit invalid_argument(const char* __s) : logic_error(__s) {} 1183e519524SHoward Hinnant 119a62f2899SHoward Hinnant virtual ~invalid_argument() _NOEXCEPT; 1203e519524SHoward Hinnant}; 1213e519524SHoward Hinnant 1223e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI length_error 1233e519524SHoward Hinnant : public logic_error 1243e519524SHoward Hinnant{ 1253e519524SHoward Hinnantpublic: 1263e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit length_error(const string& __s) : logic_error(__s) {} 1273e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit length_error(const char* __s) : logic_error(__s) {} 1283e519524SHoward Hinnant 129a62f2899SHoward Hinnant virtual ~length_error() _NOEXCEPT; 1303e519524SHoward Hinnant}; 1313e519524SHoward Hinnant 1323e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI out_of_range 1333e519524SHoward Hinnant : public logic_error 1343e519524SHoward Hinnant{ 1353e519524SHoward Hinnantpublic: 1363e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const string& __s) : logic_error(__s) {} 1373e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit out_of_range(const char* __s) : logic_error(__s) {} 1383e519524SHoward Hinnant 139a62f2899SHoward Hinnant virtual ~out_of_range() _NOEXCEPT; 1403e519524SHoward Hinnant}; 1413e519524SHoward Hinnant 1423e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI range_error 1433e519524SHoward Hinnant : public runtime_error 1443e519524SHoward Hinnant{ 1453e519524SHoward Hinnantpublic: 1463e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit range_error(const string& __s) : runtime_error(__s) {} 1473e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit range_error(const char* __s) : runtime_error(__s) {} 1483e519524SHoward Hinnant 149a62f2899SHoward Hinnant virtual ~range_error() _NOEXCEPT; 1503e519524SHoward Hinnant}; 1513e519524SHoward Hinnant 1523e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI overflow_error 1533e519524SHoward Hinnant : public runtime_error 1543e519524SHoward Hinnant{ 1553e519524SHoward Hinnantpublic: 1563e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const string& __s) : runtime_error(__s) {} 1573e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit overflow_error(const char* __s) : runtime_error(__s) {} 1583e519524SHoward Hinnant 159a62f2899SHoward Hinnant virtual ~overflow_error() _NOEXCEPT; 1603e519524SHoward Hinnant}; 1613e519524SHoward Hinnant 1623e519524SHoward Hinnantclass _LIBCPP_EXCEPTION_ABI underflow_error 1633e519524SHoward Hinnant : public runtime_error 1643e519524SHoward Hinnant{ 1653e519524SHoward Hinnantpublic: 1663e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const string& __s) : runtime_error(__s) {} 1673e519524SHoward Hinnant _LIBCPP_INLINE_VISIBILITY explicit underflow_error(const char* __s) : runtime_error(__s) {} 1683e519524SHoward Hinnant 169a62f2899SHoward Hinnant virtual ~underflow_error() _NOEXCEPT; 1703e519524SHoward Hinnant}; 1713e519524SHoward Hinnant 1723e519524SHoward Hinnant} // std 1733e519524SHoward Hinnant 174*d437fa5cSMarshall Clow_LIBCPP_BEGIN_NAMESPACE_STD 175*d437fa5cSMarshall Clow 176*d437fa5cSMarshall Clow// in the dylib 177*d437fa5cSMarshall Clow_LIBCPP_NORETURN _LIBCPP_FUNC_VIS void __throw_runtime_error(const char*); 178*d437fa5cSMarshall Clow 179*d437fa5cSMarshall Clow_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE 180*d437fa5cSMarshall Clowvoid __throw_logic_error(const char*__msg) 181*d437fa5cSMarshall Clow{ 182*d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 183*d437fa5cSMarshall Clow throw logic_error(__msg); 184*d437fa5cSMarshall Clow#else 185*d437fa5cSMarshall Clow _VSTD::abort(); 186*d437fa5cSMarshall Clow#endif 187*d437fa5cSMarshall Clow} 188*d437fa5cSMarshall Clow 189*d437fa5cSMarshall Clow_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE 190*d437fa5cSMarshall Clowvoid __throw_domain_error(const char*__msg) 191*d437fa5cSMarshall Clow{ 192*d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 193*d437fa5cSMarshall Clow throw domain_error(__msg); 194*d437fa5cSMarshall Clow#else 195*d437fa5cSMarshall Clow _VSTD::abort(); 196*d437fa5cSMarshall Clow#endif 197*d437fa5cSMarshall Clow} 198*d437fa5cSMarshall Clow 199*d437fa5cSMarshall Clow_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE 200*d437fa5cSMarshall Clowvoid __throw_invalid_argument(const char*__msg) 201*d437fa5cSMarshall Clow{ 202*d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 203*d437fa5cSMarshall Clow throw invalid_argument(__msg); 204*d437fa5cSMarshall Clow#else 205*d437fa5cSMarshall Clow _VSTD::abort(); 206*d437fa5cSMarshall Clow#endif 207*d437fa5cSMarshall Clow} 208*d437fa5cSMarshall Clow 209*d437fa5cSMarshall Clow_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE 210*d437fa5cSMarshall Clowvoid __throw_length_error(const char*__msg) 211*d437fa5cSMarshall Clow{ 212*d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 213*d437fa5cSMarshall Clow throw length_error(__msg); 214*d437fa5cSMarshall Clow#else 215*d437fa5cSMarshall Clow _VSTD::abort(); 216*d437fa5cSMarshall Clow#endif 217*d437fa5cSMarshall Clow} 218*d437fa5cSMarshall Clow 219*d437fa5cSMarshall Clow_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE 220*d437fa5cSMarshall Clowvoid __throw_out_of_range(const char*__msg) 221*d437fa5cSMarshall Clow{ 222*d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 223*d437fa5cSMarshall Clow throw out_of_range(__msg); 224*d437fa5cSMarshall Clow#else 225*d437fa5cSMarshall Clow _VSTD::abort(); 226*d437fa5cSMarshall Clow#endif 227*d437fa5cSMarshall Clow} 228*d437fa5cSMarshall Clow 229*d437fa5cSMarshall Clow_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE 230*d437fa5cSMarshall Clowvoid __throw_range_error(const char*__msg) 231*d437fa5cSMarshall Clow{ 232*d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 233*d437fa5cSMarshall Clow throw range_error(__msg); 234*d437fa5cSMarshall Clow#else 235*d437fa5cSMarshall Clow _VSTD::abort(); 236*d437fa5cSMarshall Clow#endif 237*d437fa5cSMarshall Clow} 238*d437fa5cSMarshall Clow 239*d437fa5cSMarshall Clow_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE 240*d437fa5cSMarshall Clowvoid __throw_overflow_error(const char*__msg) 241*d437fa5cSMarshall Clow{ 242*d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 243*d437fa5cSMarshall Clow throw overflow_error(__msg); 244*d437fa5cSMarshall Clow#else 245*d437fa5cSMarshall Clow _VSTD::abort(); 246*d437fa5cSMarshall Clow#endif 247*d437fa5cSMarshall Clow} 248*d437fa5cSMarshall Clow 249*d437fa5cSMarshall Clow_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE 250*d437fa5cSMarshall Clowvoid __throw_underflow_error(const char*__msg) 251*d437fa5cSMarshall Clow{ 252*d437fa5cSMarshall Clow#ifndef _LIBCPP_NO_EXCEPTIONS 253*d437fa5cSMarshall Clow throw underflow_error(__msg); 254*d437fa5cSMarshall Clow#else 255*d437fa5cSMarshall Clow _VSTD::abort(); 256*d437fa5cSMarshall Clow#endif 257*d437fa5cSMarshall Clow} 258*d437fa5cSMarshall Clow 259*d437fa5cSMarshall Clow_LIBCPP_END_NAMESPACE_STD 260*d437fa5cSMarshall Clow 2613e519524SHoward Hinnant#endif // _LIBCPP_STDEXCEPT 262