Go to the documentation of this file.
30 #ifndef _GLIBCXX_DEBUG_MACROS_H
31 #define _GLIBCXX_DEBUG_MACROS_H 1
42 #define _GLIBCXX_DEBUG_VERIFY(_Condition,_ErrorMessage) \
46 __gnu_debug::_Error_formatter::_M_at(__FILE__, __LINE__) \
47 ._ErrorMessage._M_error(); \
51 #define __glibcxx_check_valid_range(_First,_Last) \
52 _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__valid_range(_First, _Last), \
53 _M_message(__gnu_debug::__msg_valid_range) \
54 ._M_iterator(_First, #_First) \
55 ._M_iterator(_Last, #_Last))
64 #define __glibcxx_check_insert(_Position) \
65 _GLIBCXX_DEBUG_VERIFY(!_Position._M_singular(), \
66 _M_message(__gnu_debug::__msg_insert_singular) \
67 ._M_sequence(*this, "this") \
68 ._M_iterator(_Position, #_Position)); \
69 _GLIBCXX_DEBUG_VERIFY(_Position._M_attached_to(this), \
70 _M_message(__gnu_debug::__msg_insert_different) \
71 ._M_sequence(*this, "this") \
72 ._M_iterator(_Position, #_Position))
87 #define __glibcxx_check_insert_range(_Position,_First,_Last) \
88 __glibcxx_check_valid_range(_First,_Last); \
89 _GLIBCXX_DEBUG_VERIFY(!_Position._M_singular(), \
90 _M_message(__gnu_debug::__msg_insert_singular) \
91 ._M_sequence(*this, "this") \
92 ._M_iterator(_Position, #_Position)); \
93 _GLIBCXX_DEBUG_VERIFY(_Position._M_attached_to(this), \
94 _M_message(__gnu_debug::__msg_insert_different) \
95 ._M_sequence(*this, "this") \
96 ._M_iterator(_Position, #_Position))
102 #define __glibcxx_check_erase(_Position) \
103 _GLIBCXX_DEBUG_VERIFY(_Position._M_dereferenceable(), \
104 _M_message(__gnu_debug::__msg_erase_bad) \
105 ._M_sequence(*this, "this") \
106 ._M_iterator(_Position, #_Position)); \
107 _GLIBCXX_DEBUG_VERIFY(_Position._M_attached_to(this), \
108 _M_message(__gnu_debug::__msg_erase_different) \
109 ._M_sequence(*this, "this") \
110 ._M_iterator(_Position, #_Position))
116 #define __glibcxx_check_erase_range(_First,_Last) \
117 __glibcxx_check_valid_range(_First,_Last); \
118 _GLIBCXX_DEBUG_VERIFY(_First._M_attached_to(this), \
119 _M_message(__gnu_debug::__msg_erase_different) \
120 ._M_sequence(*this, "this") \
121 ._M_iterator(_First, #_First) \
122 ._M_iterator(_Last, #_Last))
125 #define __glibcxx_check_subscript(_N) \
126 _GLIBCXX_DEBUG_VERIFY(_N < this->size(), \
127 _M_message(__gnu_debug::__msg_subscript_oob) \
128 ._M_sequence(*this, "this") \
129 ._M_integer(_N, #_N) \
130 ._M_integer(this->size(), "size"))
133 #define __glibcxx_check_nonempty() \
134 _GLIBCXX_DEBUG_VERIFY(! this->empty(), \
135 _M_message(__gnu_debug::__msg_empty) \
136 ._M_sequence(*this, "this"))
139 #define __glibcxx_check_sorted(_First,_Last) \
140 __glibcxx_check_valid_range(_First,_Last); \
141 _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_sorted(_First, _Last), \
142 _M_message(__gnu_debug::__msg_unsorted) \
143 ._M_iterator(_First, #_First) \
144 ._M_iterator(_Last, #_Last))
148 #define __glibcxx_check_sorted_pred(_First,_Last,_Pred) \
149 __glibcxx_check_valid_range(_First,_Last); \
150 _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_sorted(_First, _Last, _Pred), \
151 _M_message(__gnu_debug::__msg_unsorted_pred) \
152 ._M_iterator(_First, #_First) \
153 ._M_iterator(_Last, #_Last) \
157 #define __glibcxx_check_sorted_set(_First1,_Last1,_First2) \
158 __glibcxx_check_valid_range(_First1,_Last1); \
159 _GLIBCXX_DEBUG_VERIFY( \
160 __gnu_debug::__check_sorted_set(_First1, _Last1, _First2), \
161 _M_message(__gnu_debug::__msg_unsorted) \
162 ._M_iterator(_First1, #_First1) \
163 ._M_iterator(_Last1, #_Last1))
166 #define __glibcxx_check_sorted_set_pred(_First1,_Last1,_First2,_Pred) \
167 __glibcxx_check_valid_range(_First1,_Last1); \
168 _GLIBCXX_DEBUG_VERIFY( \
169 __gnu_debug::__check_sorted_set(_First1, _Last1, _First2, _Pred), \
170 _M_message(__gnu_debug::__msg_unsorted_pred) \
171 ._M_iterator(_First1, #_First1) \
172 ._M_iterator(_Last1, #_Last1) \
177 #define __glibcxx_check_partitioned_lower(_First,_Last,_Value) \
178 __glibcxx_check_valid_range(_First,_Last); \
179 _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
181 _M_message(__gnu_debug::__msg_unpartitioned) \
182 ._M_iterator(_First, #_First) \
183 ._M_iterator(_Last, #_Last) \
186 #define __glibcxx_check_partitioned_upper(_First,_Last,_Value) \
187 __glibcxx_check_valid_range(_First,_Last); \
188 _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
190 _M_message(__gnu_debug::__msg_unpartitioned) \
191 ._M_iterator(_First, #_First) \
192 ._M_iterator(_Last, #_Last) \
197 #define __glibcxx_check_partitioned_lower_pred(_First,_Last,_Value,_Pred) \
198 __glibcxx_check_valid_range(_First,_Last); \
199 _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
201 _M_message(__gnu_debug::__msg_unpartitioned_pred) \
202 ._M_iterator(_First, #_First) \
203 ._M_iterator(_Last, #_Last) \
209 #define __glibcxx_check_partitioned_upper_pred(_First,_Last,_Value,_Pred) \
210 __glibcxx_check_valid_range(_First,_Last); \
211 _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
213 _M_message(__gnu_debug::__msg_unpartitioned_pred) \
214 ._M_iterator(_First, #_First) \
215 ._M_iterator(_Last, #_Last) \
220 #define __glibcxx_check_heap(_First,_Last) \
221 __glibcxx_check_valid_range(_First,_Last); \
222 _GLIBCXX_DEBUG_VERIFY(std::__is_heap(_First, _Last), \
223 _M_message(__gnu_debug::__msg_not_heap) \
224 ._M_iterator(_First, #_First) \
225 ._M_iterator(_Last, #_Last))
229 #define __glibcxx_check_heap_pred(_First,_Last,_Pred) \
230 __glibcxx_check_valid_range(_First,_Last); \
231 _GLIBCXX_DEBUG_VERIFY(std::__is_heap(_First, _Last, _Pred), \
232 _M_message(__gnu_debug::__msg_not_heap_pred) \
233 ._M_iterator(_First, #_First) \
234 ._M_iterator(_Last, #_Last) \
237 #ifdef _GLIBCXX_DEBUG_PEDANTIC
238 # define __glibcxx_check_string(_String) _GLIBCXX_DEBUG_ASSERT(_String != 0)
239 # define __glibcxx_check_string_len(_String,_Len) \
240 _GLIBCXX_DEBUG_ASSERT(_String != 0 || _Len == 0)
242 # define __glibcxx_check_string(_String)
243 # define __glibcxx_check_string_len(_String,_Len)