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 24struct S { int val; }; 25 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 63int main() 64{ 65} 66 67#endif 68