licornea_tools
Main Page
Classes
Files
File List
File Members
src
lib
assert.h
Go to the documentation of this file.
1
#ifndef LICORNEA_ASSERT_H_
2
#define LICORNEA_ASSERT_H_
3
4
#include <stdexcept>
5
6
#define MF_STRINGIZE_(X) #X
7
#define MF_STRINGIZE(X) MF_STRINGIZE_(X)
8
9
#define MF_GET_NARG_MACRO_2(_1, _2, NAME, ...) NAME
10
11
#ifndef NDEBUG
12
#define MF_ASSERT_CRIT_MSG_(__condition__, __msg__) \
13
if(! (__condition__)) throw ::tlz::failed_assertion(__msg__ " at " __FILE__ ":" MF_STRINGIZE(__LINE__))
14
#define MF_ASSERT_MSG_(__condition__, __msg__) \
15
if(! (__condition__)) throw ::tlz::failed_assertion(__msg__ " at " __FILE__ ":" MF_STRINGIZE(__LINE__))
16
#else
17
#define MF_ASSERT_CRIT_MSG_(__condition__, __msg__) \
18
(void)0
19
#define MF_ASSERT_MSG_(__condition__, __msg__) \
20
if(! (__condition__)) throw ::tlz::failed_assertion(__msg__ " at " __FILE__ ":" MF_STRINGIZE(__LINE__))
21
#endif
22
23
24
#define MF_ASSERT_(__condition__) MF_ASSERT_MSG_(__condition__, "`" #__condition__ "`")
25
#define MF_ASSERT_CRIT_(__condition__) MF_ASSERT_CRIT_MSG_(__condition__, "`" #__condition__ "`")
26
27
#ifdef _MSC_VER
28
// workaround for MSVC: http://stackoverflow.com/a/5134656/4108376
29
#define MF_EXPAND_(x) x
30
#define MF_ASSERT(...) MF_EXPAND_( MF_GET_NARG_MACRO_2(__VA_ARGS__, MF_ASSERT_MSG_, MF_ASSERT_, IGNORE)(__VA_ARGS__) )
31
#define MF_ASSERT_CRIT(...) MF_EXPAND_( MF_GET_NARG_MACRO_2(__VA_ARGS__, MF_ASSERT_CRIT_, TFF_ASSERT_CRIT_, IGNORE)(__VA_ARGS__) )
32
#else
33
#define MF_ASSERT(...) MF_GET_NARG_MACRO_2(__VA_ARGS__, MF_ASSERT_MSG_, MF_ASSERT_, IGNORE)(__VA_ARGS__)
34
#define MF_ASSERT_CRIT(...) MF_GET_NARG_MACRO_2(__VA_ARGS__, MF_ASSERT_CRIT_MSG_, MF_ASSERT_CRIT_, IGNORE)(__VA_ARGS__)
35
#endif
36
37
#ifdef Assert
38
#undef Assert
39
#endif
40
#define Assert MF_ASSERT
41
42
#ifdef Assert_crit
43
#undef Assert_crit
44
#endif
45
#define Assert_crit MF_ASSERT_CRIT
46
47
49
50
51
#include <stdexcept>
52
53
namespace
tlz
{
54
55
class
failed_assertion
:
public
std::runtime_error {
56
public
:
57
using
std::runtime_error::runtime_error;
58
};
59
60
}
61
62
#endif
tlz::failed_assertion
Definition:
assert.h:55
tlz
Definition:
feature_slopes.cc:7
Generated by
1.8.11