xref: /llvm-project/libcxx/include/__cxx03/exception (revision ce7771902dc50d900de639d499a60486b83f70e0)
1e78f53d1SNikolas Klauser// -*- C++ -*-
2e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===//
3e78f53d1SNikolas Klauser//
4e78f53d1SNikolas Klauser// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5e78f53d1SNikolas Klauser// See https://llvm.org/LICENSE.txt for license information.
6e78f53d1SNikolas Klauser// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7e78f53d1SNikolas Klauser//
8e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===//
9e78f53d1SNikolas Klauser
10*ce777190SNikolas Klauser#ifndef _LIBCPP___CXX03_EXCEPTION
11*ce777190SNikolas Klauser#define _LIBCPP___CXX03_EXCEPTION
12e78f53d1SNikolas Klauser
13e78f53d1SNikolas Klauser/*
14e78f53d1SNikolas Klauser    exception synopsis
15e78f53d1SNikolas Klauser
16e78f53d1SNikolas Klausernamespace std
17e78f53d1SNikolas Klauser{
18e78f53d1SNikolas Klauser
19e78f53d1SNikolas Klauserclass exception
20e78f53d1SNikolas Klauser{
21e78f53d1SNikolas Klauserpublic:
22e78f53d1SNikolas Klauser    exception() noexcept;
23e78f53d1SNikolas Klauser    exception(const exception&) noexcept;
24e78f53d1SNikolas Klauser    exception& operator=(const exception&) noexcept;
25e78f53d1SNikolas Klauser    virtual ~exception() noexcept;
26e78f53d1SNikolas Klauser    virtual const char* what() const noexcept;
27e78f53d1SNikolas Klauser};
28e78f53d1SNikolas Klauser
29e78f53d1SNikolas Klauserclass bad_exception
30e78f53d1SNikolas Klauser    : public exception
31e78f53d1SNikolas Klauser{
32e78f53d1SNikolas Klauserpublic:
33e78f53d1SNikolas Klauser    bad_exception() noexcept;
34e78f53d1SNikolas Klauser    bad_exception(const bad_exception&) noexcept;
35e78f53d1SNikolas Klauser    bad_exception& operator=(const bad_exception&) noexcept;
36e78f53d1SNikolas Klauser    virtual ~bad_exception() noexcept;
37e78f53d1SNikolas Klauser    virtual const char* what() const noexcept;
38e78f53d1SNikolas Klauser};
39e78f53d1SNikolas Klauser
40e78f53d1SNikolas Klausertypedef void (*unexpected_handler)();
41e78f53d1SNikolas Klauserunexpected_handler set_unexpected(unexpected_handler  f ) noexcept;
42e78f53d1SNikolas Klauserunexpected_handler get_unexpected() noexcept;
43e78f53d1SNikolas Klauser[[noreturn]] void unexpected();
44e78f53d1SNikolas Klauser
45e78f53d1SNikolas Klausertypedef void (*terminate_handler)();
46e78f53d1SNikolas Klauserterminate_handler set_terminate(terminate_handler  f ) noexcept;
47e78f53d1SNikolas Klauserterminate_handler get_terminate() noexcept;
48e78f53d1SNikolas Klauser[[noreturn]] void terminate() noexcept;
49e78f53d1SNikolas Klauser
50e78f53d1SNikolas Klauserbool uncaught_exception()  noexcept;
51e78f53d1SNikolas Klauserint  uncaught_exceptions() noexcept;  // C++17
52e78f53d1SNikolas Klauser
53e78f53d1SNikolas Klausertypedef unspecified exception_ptr;
54e78f53d1SNikolas Klauser
55e78f53d1SNikolas Klauserexception_ptr current_exception() noexcept;
56e78f53d1SNikolas Klauservoid rethrow_exception [[noreturn]] (exception_ptr p);
57e78f53d1SNikolas Klausertemplate<class E> exception_ptr make_exception_ptr(E e) noexcept;
58e78f53d1SNikolas Klauser
59e78f53d1SNikolas Klauserclass nested_exception
60e78f53d1SNikolas Klauser{
61e78f53d1SNikolas Klauserpublic:
62e78f53d1SNikolas Klauser    nested_exception() noexcept;
63e78f53d1SNikolas Klauser    nested_exception(const nested_exception&) noexcept = default;
64e78f53d1SNikolas Klauser    nested_exception& operator=(const nested_exception&) noexcept = default;
65e78f53d1SNikolas Klauser    virtual ~nested_exception() = default;
66e78f53d1SNikolas Klauser
67e78f53d1SNikolas Klauser    // access functions
68e78f53d1SNikolas Klauser    [[noreturn]] void rethrow_nested() const;
69e78f53d1SNikolas Klauser    exception_ptr nested_ptr() const noexcept;
70e78f53d1SNikolas Klauser};
71e78f53d1SNikolas Klauser
72e78f53d1SNikolas Klausertemplate <class T> [[noreturn]] void throw_with_nested(T&& t);
73e78f53d1SNikolas Klausertemplate <class E> void rethrow_if_nested(const E& e);
74e78f53d1SNikolas Klauser
75e78f53d1SNikolas Klauser}  // std
76e78f53d1SNikolas Klauser
77e78f53d1SNikolas Klauser*/
78e78f53d1SNikolas Klauser
7973fbae83SNikolas Klauser#include <__cxx03/__config>
8073fbae83SNikolas Klauser#include <__cxx03/__exception/exception.h>
8173fbae83SNikolas Klauser#include <__cxx03/__exception/exception_ptr.h>
8273fbae83SNikolas Klauser#include <__cxx03/__exception/nested_exception.h>
8373fbae83SNikolas Klauser#include <__cxx03/__exception/operations.h>
8473fbae83SNikolas Klauser#include <__cxx03/__exception/terminate.h>
8573fbae83SNikolas Klauser#include <__cxx03/version>
86e78f53d1SNikolas Klauser
87e78f53d1SNikolas Klauser#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
88e78f53d1SNikolas Klauser#  pragma GCC system_header
89e78f53d1SNikolas Klauser#endif
90e78f53d1SNikolas Klauser
91e78f53d1SNikolas Klauser#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
9273fbae83SNikolas Klauser#  include <__cxx03/cstdlib>
9373fbae83SNikolas Klauser#  include <__cxx03/type_traits>
94e78f53d1SNikolas Klauser#endif
95e78f53d1SNikolas Klauser
96*ce777190SNikolas Klauser#endif // _LIBCPP___CXX03_EXCEPTION
97