File: reference.adoc

package info (click to toggle)
boost1.90 1.90.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 593,120 kB
  • sloc: cpp: 4,190,908; xml: 196,648; python: 34,618; ansic: 23,145; asm: 5,468; sh: 3,774; makefile: 1,161; perl: 1,020; sql: 728; ruby: 676; yacc: 478; java: 77; lisp: 24; csh: 6
file content (137 lines) | stat: -rw-r--r-- 3,903 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
////
Copyright 2019 Peter Dimov
Distributed under the Boost Software License, Version 1.0.
http://www.boost.org/LICENSE_1_0.txt
////

[#reference]
# Reference
:toc:
:toc-title:
:idprefix:

[#synopsis]
## <boost/throw_exception.hpp> Synopsis

```
#include <boost/assert/source_location.hpp>
#include <boost/config.hpp>
#include <exception>

namespace boost
{

#if defined( BOOST_NO_EXCEPTIONS )

BOOST_NORETURN void throw_exception( std::exception const & e ); // user defined

BOOST_NORETURN void throw_exception( std::exception const & e,
  boost::source_location const & loc ); // user defined

#else

template<class E> BOOST_NORETURN void throw_exception( E const & e );

template<class E> BOOST_NORETURN void throw_exception( E const & e,
  boost::source_location const & loc );

#endif

} // namespace boost

#define BOOST_THROW_EXCEPTION(x) \
  ::boost::throw_exception(x, BOOST_CURRENT_LOCATION)

namespace boost
{

template<class E> BOOST_NORETURN void throw_with_location( E && e,
  boost::source_location const & loc = BOOST_CURRENT_LOCATION );

template<class E> boost::source_location get_throw_location( E const & e );

} // namespace boost
```

## throw_exception

```
#if defined( BOOST_NO_EXCEPTIONS )

BOOST_NORETURN void throw_exception( std::exception const & e ); // user defined

#else

template<class E> BOOST_NORETURN void throw_exception( E const & e );

#endif
```

Requires: :: `E` must have `std::exception` as a public and unambiguous base
  class.

Effects: ::
  * When exceptions aren't available, the function is declared, but
    not defined. The user is expected to supply an appropriate definition.
  * Otherwise, if `BOOST_EXCEPTION_DISABLE` is defined, the function
    throws `e`.
  * Otherwise, the function throws an object of a type derived from `E`,
    derived from `boost::exception`, if `E` doesn't already derive from
    it, and containing the necessary support for `boost::exception_ptr`.

```
#if defined( BOOST_NO_EXCEPTIONS )

BOOST_NORETURN void throw_exception( std::exception const & e,
  boost::source_location const & loc ); // user defined

#else

template<class E> BOOST_NORETURN void throw_exception( E const & e,
  boost::source_location const & loc );

#endif
```

Requires: :: `E` must have `std::exception` as a public and unambiguous base
  class.

Effects: ::
  * When exceptions aren't available, the function is declared, but
    not defined. The user is expected to supply an appropriate definition.
  * Otherwise, if `BOOST_EXCEPTION_DISABLE` is defined, the function
    throws `e`.
  * Otherwise, the function throws an object of a type derived from `E`,
    derived from `boost::exception`, if `E` doesn't already derive from
    it, and containing the necessary support for `boost::exception_ptr`. The
    `boost::exception` base class is initialized to contain the source
    location `loc`.

## throw_with_location

```
template<class E> BOOST_NORETURN void throw_with_location( E && e,
  boost::source_location const & loc = BOOST_CURRENT_LOCATION );
```

Requires: :: `std::decay<E>::type` must have `std::exception` as a public
  and unambiguous base class.

Effects: ::
  * When exceptions aren't available, `boost::throw_exception( e, loc );`
  * Otherwise, the function throws an object of a type derived from `E`,
    such that, if this object `x` is caught as `std::exception` or `E`,
    `boost::get_throw_location( x )` would return `loc`.

## get_throw_location

```
template<class E> boost::source_location get_throw_location( E const & e );
```

Requires: :: `E` must be polymorphic.
Effects: ::
* If `e` is a subobject of the object thrown by `boost::throw_with_location( x, loc )`, returns `loc`.
* If `dynamic_cast<boost::exception const*>( e )` returns a nonzero value, returns the source location stored in that `boost::exception` subobject, if any.
* Otherwise, returns a default constructed source location.