llvm-project

Форк
0
96 строк · 2.6 Кб
1
// -*- C++ -*-
2
//===----------------------------------------------------------------------===//
3
//
4
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5
// See https://llvm.org/LICENSE.txt for license information.
6
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7
//
8
//===----------------------------------------------------------------------===//
9

10
#ifndef _LIBCPP_EXCEPTION
11
#define _LIBCPP_EXCEPTION
12

13
/*
14
    exception synopsis
15

16
namespace std
17
{
18

19
class exception
20
{
21
public:
22
    exception() noexcept;
23
    exception(const exception&) noexcept;
24
    exception& operator=(const exception&) noexcept;
25
    virtual ~exception() noexcept;
26
    virtual const char* what() const noexcept;
27
};
28

29
class bad_exception
30
    : public exception
31
{
32
public:
33
    bad_exception() noexcept;
34
    bad_exception(const bad_exception&) noexcept;
35
    bad_exception& operator=(const bad_exception&) noexcept;
36
    virtual ~bad_exception() noexcept;
37
    virtual const char* what() const noexcept;
38
};
39

40
typedef void (*unexpected_handler)();
41
unexpected_handler set_unexpected(unexpected_handler  f ) noexcept;
42
unexpected_handler get_unexpected() noexcept;
43
[[noreturn]] void unexpected();
44

45
typedef void (*terminate_handler)();
46
terminate_handler set_terminate(terminate_handler  f ) noexcept;
47
terminate_handler get_terminate() noexcept;
48
[[noreturn]] void terminate() noexcept;
49

50
bool uncaught_exception()  noexcept;
51
int  uncaught_exceptions() noexcept;  // C++17
52

53
typedef unspecified exception_ptr;
54

55
exception_ptr current_exception() noexcept;
56
void rethrow_exception [[noreturn]] (exception_ptr p);
57
template<class E> exception_ptr make_exception_ptr(E e) noexcept;
58

59
class nested_exception
60
{
61
public:
62
    nested_exception() noexcept;
63
    nested_exception(const nested_exception&) noexcept = default;
64
    nested_exception& operator=(const nested_exception&) noexcept = default;
65
    virtual ~nested_exception() = default;
66

67
    // access functions
68
    [[noreturn]] void rethrow_nested() const;
69
    exception_ptr nested_ptr() const noexcept;
70
};
71

72
template <class T> [[noreturn]] void throw_with_nested(T&& t);
73
template <class E> void rethrow_if_nested(const E& e);
74

75
}  // std
76

77
*/
78

79
#include <__config>
80
#include <__exception/exception.h>
81
#include <__exception/exception_ptr.h>
82
#include <__exception/nested_exception.h>
83
#include <__exception/operations.h>
84
#include <__exception/terminate.h>
85
#include <version>
86

87
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
88
#  pragma GCC system_header
89
#endif
90

91
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
92
#  include <cstdlib>
93
#  include <type_traits>
94
#endif
95

96
#endif // _LIBCPP_EXCEPTION
97

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.