NVIDIA IndeX: Base API nvidia_logo_transpbg.gif Up
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
assert.h
Go to the documentation of this file.
1 /***************************************************************************************************
2  * Copyright 2020 NVIDIA Corporation. All rights reserved.
3  **************************************************************************************************/
8 
9 #ifndef MI_BASE_ASSERT_H
10 #define MI_BASE_ASSERT_H
11 
12 #include <mi/base/config.h>
13 
14 namespace mi {
15 
16 namespace base {
17 
38 #ifndef mi_static_assert
53 #ifdef _MSC_VER
54 // Special case for Visual Studio 7.1, since __LINE__ would not work.
55 #define mi_static_assert(expr) \
56  typedef mi::base::static_assert_test<static_cast<int>( \
57  sizeof(mi::base::static_assert_failure<static_cast<bool>((expr))>))> \
58  MI_BASE_JOIN(static_assert_instance, __COUNTER__)
59 #else // _MSC_VER
60 #ifdef MI_COMPILER_GCC
61 #define mi_static_assert_attribute __attribute__((unused))
62 #else
63 #define mi_static_assert_attribute
64 #endif
65 #define mi_static_assert(expr) \
66  typedef mi::base::static_assert_test<static_cast<int>( \
67  sizeof(mi::base::static_assert_failure<static_cast<bool>((expr))>))> \
68  MI_BASE_JOIN(static_assert_instance, __LINE__) mi_static_assert_attribute
69 #endif // _MSC_VER
70 #endif // mi_static_assert
71 
72 // helper definitions for the mi_static_assert above.
73 template <bool> struct static_assert_failure;
74 template <> struct static_assert_failure<true> {};
75 template <int> struct static_assert_test {};
76 
77 #if defined( mi_base_assert) && ! defined( mi_base_assert_msg) \
78  || ! defined( mi_base_assert) && defined( mi_base_assert_msg)
79 error "Only one of mi_base_assert and mi_base_assert_msg has been defined. Please define both."
80 #else
81 #ifndef mi_base_assert
82 
94 #define mi_base_assert(expr) (static_cast<void>(0)) // valid but void null stmt
95 
111 #define mi_base_assert_msg(expr, msg) (static_cast<void>(0)) // valid but void null stmt
112 
113 // Just for doxygen, begin
114 
119 #define mi_base_assert_enabled
120 #undef mi_base_assert_enabled
121 
122 // Just for doxygen, end
123 
124 #else // mi_base_assert
125 
126 #define mi_base_assert_enabled
127 
128 #endif // mi_base_assert
129 #endif // mi_base_assert xor mi_base_assert_msg
130 
140 #if defined(__FUNCSIG__)
141 # define MI_BASE_ASSERT_FUNCTION __FUNCSIG__
142 #elif defined( __cplusplus) && defined(__GNUC__) && defined(__GNUC_MINOR__) \
143  && ((__GNUC__ << 16) + __GNUC_MINOR__ >= (2 << 16) + 6)
144 # define MI_BASE_ASSERT_FUNCTION __PRETTY_FUNCTION__
145 #else
146 # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
147 # define MI_BASE_ASSERT_FUNCTION __func__
148 # else
149 # define MI_BASE_ASSERT_FUNCTION ("unknown")
150 # endif
151 #endif
152  // end group mi_base_assert
154 
155 } // namespace base
156 
157 } // namespace mi
158 
159 #endif // MI_BASE_ASSERT_H