RESTinio
Toggle main menu visibility
Loading...
Searching...
No Matches
restinio
compiler_features.hpp
Go to the documentation of this file.
1
/*
2
* RESTinio
3
*/
4
5
/*!
6
* @file
7
* @brief Detection of compiler version and absence of various features.
8
*
9
* @since v.0.6.0
10
*/
11
12
#
pragma
once
13
14
#
include
<
utility
>
15
16
/*!
17
* @brief A wrapper around static_assert for checking that an expression
18
* is noexcept and execution of that expression
19
*
20
* Usage example:
21
* @code
22
* some_class::~some_class() noexcept {
23
* // We should have a guarantee that this call doesn't throw.
24
* RESTINIO_ENSURE_NOEXCEPT_CALL(m_some_resouce.release());
25
* ...
26
* }
27
* @endcode
28
*
29
* @attention
30
* This macro is a part of RESTinio and is not intended to be uses as
31
* a part of public API. It can be changed or remove in some future version
32
* without any prior notice.
33
*
34
* @since v.0.6.0
35
*/
36
#
define
RESTINIO_ENSURE_NOEXCEPT_CALL
(
expr
)
37
static_assert
(
noexcept
(
expr
)
,
"this call is expected to be noexcept: "
#
expr
)
;
38
expr
39
40
/*!
41
* @brief A wrapper around static_assert for checking that an expression is
42
* noexcept
43
*
44
* Usage example:
45
* @code
46
* void remove_appropriate_items_at_front(some_container_t & cnt) noexcept {
47
* RESTINIO_STATIC_ASSERT_NOEXCEPT(cnt.empty());
48
* RESTINIO_STATIC_ASSERT_NOEXCEPT(cnt.front());
49
* RESTINIO_STATIC_ASSERT_NOEXCEPT(cnt.pop_front());
50
*
51
* while(!cnt.empty() && some_confitions(cnt.front()) {
52
* // We don't expect exceptions here.
53
* cnt.pop_front();
54
* }
55
* }
56
* @endcode
57
*
58
* @attention
59
* This macro is a part of RESTinio and is not intended to be uses as
60
* a part of public API. It can be changed or remove in some future version
61
* without any prior notice.
62
*
63
* @since v.0.6.0
64
*/
65
#
define
RESTINIO_STATIC_ASSERT_NOEXCEPT
(
expr
)
66
static_assert
(
noexcept
(
expr
)
,
#
expr
" is expected to be noexcept"
)
67
68
/*!
69
* @brief A wrapper around static_assert for checking that an expression is
70
* not noexcept.
71
*
72
* Usage example:
73
* @code
74
* some_class::~some_class() noexcept {
75
* // If that call throws then we have to use try-catch block.
76
* RESTINIO_STATIC_ASSERT_NOT_NOEXCEPT(m_some_resouce.release());
77
* try {
78
* m_some_resouce.release();
79
* }
80
* catch(...) {}
81
* ...
82
* }
83
* @endcode
84
*
85
* @attention
86
* This macro is a part of RESTinio and is not intended to be uses as
87
* a part of public API. It can be changed or remove in some future version
88
* without any prior notice.
89
*
90
* @since v.0.6.0
91
*/
92
#
define
RESTINIO_STATIC_ASSERT_NOT_NOEXCEPT
(
expr
)
93
static_assert
(
!
noexcept
(
expr
)
,
#
expr
" is not expected to be noexcept"
)
Generated by
1.17.0