1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // <list> 11 12 // Operations on "NULL" iterators 13 14 #if _LIBCPP_DEBUG >= 1 15 16 #define _LIBCPP_ASSERT(x, m) do { if (!x) throw 1; } while(0) 17 18 #include <list> 19 #include <cassert> 20 #include <iterator> 21 #include <exception> 22 #include <cstdlib> 23 24 struct S { int val; }; 25 main()26int main() 27 { 28 #if _LIBCPP_STD_VER > 11 29 { 30 unsigned lib_asserts; 31 32 typedef S T; 33 typedef std::list<T> C; 34 C::iterator i{}; 35 C::const_iterator ci{}; 36 37 lib_asserts = 0; 38 try { ++i; } catch (int) { ++lib_asserts; } 39 try { i++; } catch (int) { ++lib_asserts; } 40 try { ++ci; } catch (int) { ++lib_asserts; } 41 try { ci++; } catch (int) { ++lib_asserts; } 42 assert(lib_asserts == 4); 43 44 lib_asserts = 0; 45 try { --i; } catch (int) { ++lib_asserts; } 46 try { i--; } catch (int) { ++lib_asserts; } 47 try { --ci; } catch (int) { ++lib_asserts; } 48 try { ci--; } catch (int) { ++lib_asserts; } 49 assert(lib_asserts == 4); 50 51 lib_asserts = 0; 52 try { *i; } catch (int) { ++lib_asserts; } 53 try { *ci; } catch (int) { ++lib_asserts; } 54 try { (void) i->val; } catch (int) { ++lib_asserts; } 55 try { (void) ci->val; } catch (int) { ++lib_asserts; } 56 assert(lib_asserts == 4); 57 } 58 #endif 59 } 60 61 #else 62 main()63int main() 64 { 65 } 66 67 #endif 68