About
Contact
QtCreator
KDevelop
Solarized
1
//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
2
3
//Distributed under the Boost Software License, Version 1.0. (See accompanying
4
//file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt
)
5
6
#include
<boost/config.hpp>
7
8
#
if
defined(
BOOST_NO_EXCEPTIONS
)
9
# error This program requires exception handling.
10
#
endif
11
12
#include
<boost/exception/errinfo_api_function.hpp>
13
#include
<boost/exception/errinfo_at_line.hpp>
14
#include
<boost/exception/errinfo_errno.hpp>
15
#include
<boost/exception/errinfo_file_handle.hpp>
16
#include
<boost/exception/errinfo_file_name.hpp>
17
#include
<boost/exception/errinfo_file_open_mode.hpp>
18
#include
<boost/exception/errinfo_type_info_name.hpp>
19
#include
<boost/exception/info.hpp>
20
#include
<boost/exception/get_error_info.hpp>
21
#include
<boost/throw_exception.hpp>
22
#include
<boost/weak_ptr.hpp>
23
#include
<boost/detail/lightweight_test.hpp>
24
#include
<exception>
25
26
struct
27
test_exception
:
28
virtual
boost::
exception
,
29
virtual
std::
exception
30
{
31
};
32
33
int
34
main
()
35
{
36
using
namespace
boost
;
37
try
38
{
39
test_exception
e
;
40
e
<<
41
errinfo_api_function
(
"failed_api_function"
)
<<
42
errinfo_at_line
(
42
)
<<
43
errinfo_errno
(
0
)
<<
44
errinfo_file_handle
(
weak_ptr
<
FILE
>
(
))
<<
45
errinfo_file_name
(
"filename.txt"
)
<<
46
errinfo_file_open_mode
(
"rb"
);
47
#
ifdef
BOOST_NO_TYPEID
48
BOOST_THROW_EXCEPTION(e);
49
#
else
50
BOOST_THROW_EXCEPTION
(
e
<<
errinfo_type_info_name
(
typeid
(
int
).
name
()));
51
#
endif
52
BOOST_ERROR
(
"BOOST_THROW_EXCEPTION failed to throw."
);
53
}
54
catch
(
55
boost::
exception
&
e
)
56
{
57
BOOST_TEST
(
get_error_info
<
errinfo_api_function
>(
e
) && *
get_error_info
<
errinfo_api_function
>(
e
)
==
std::
string
(
"failed_api_function"
));
58
BOOST_TEST
(
get_error_info
<
errinfo_at_line
>(
e
) && *
get_error_info
<
errinfo_at_line
>(
e
)==
42
);
59
BOOST_TEST
(
get_error_info
<
errinfo_errno
>(
e
) && *
get_error_info
<
errinfo_errno
>(
e
)==
0
);
60
BOOST_TEST
(
get_error_info
<
errinfo_file_handle
>(
e
) &&
get_error_info
<
errinfo_file_handle
>(
e
)->
expired
());
61
BOOST_TEST
(
get_error_info
<
errinfo_file_name
>(
e
) && *
get_error_info
<
errinfo_file_name
>(
e
)
==
"filename.txt"
);
62
BOOST_TEST
(
get_error_info
<
errinfo_file_open_mode
>(
e
) && *
get_error_info
<
errinfo_file_open_mode
>(
e
)
==
"rb"
);
63
#
ifndef
BOOST_NO_TYPEID
64
BOOST_TEST
(
get_error_info
<
errinfo_type_info_name
>(
e
) && *
get_error_info
<
errinfo_type_info_name
>(
e
)
==
typeid
(
int
).
name
());
65
#
endif
66
}
67
catch
(
68
... )
69
{
70
BOOST_TEST
(
false
);
71
}
72
return
boost::
report_errors
();
73
}
74