1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // <ios> 10 11 // class ios_base 12 13 // ~ios_base() 14 15 #include <ios> 16 #include <string> 17 #include <locale> 18 #include <cassert> 19 20 #include "test_macros.h" 21 22 class test 23 : public std::ios 24 { 25 public: 26 test() 27 { 28 init(0); 29 } 30 }; 31 32 bool f1_called = false; 33 bool f2_called = false; 34 bool f3_called = false; 35 36 void f1(std::ios_base::event ev, std::ios_base& stream, int index) 37 { 38 if (ev == std::ios_base::erase_event) 39 { 40 assert(!f1_called); 41 assert( f2_called); 42 assert( f3_called); 43 assert(stream.getloc().name() == "C"); 44 assert(index == 4); 45 f1_called = true; 46 } 47 } 48 49 void f2(std::ios_base::event ev, std::ios_base& stream, int index) 50 { 51 if (ev == std::ios_base::erase_event) 52 { 53 assert(!f1_called); 54 assert(!f2_called); 55 assert( f3_called); 56 assert(stream.getloc().name() == "C"); 57 assert(index == 5); 58 f2_called = true; 59 } 60 } 61 62 void f3(std::ios_base::event ev, std::ios_base& stream, int index) 63 { 64 if (ev == std::ios_base::erase_event) 65 { 66 assert(!f1_called); 67 assert(!f2_called); 68 assert(!f3_called); 69 assert(stream.getloc().name() == "C"); 70 assert(index == 6); 71 f3_called = true; 72 } 73 } 74 75 int main(int, char**) 76 { 77 { 78 test t; 79 std::ios_base& b = t; 80 b.register_callback(f1, 4); 81 b.register_callback(f2, 5); 82 b.register_callback(f3, 6); 83 } 84 assert(f1_called); 85 assert(f2_called); 86 assert(f3_called); 87 88 return 0; 89 } 90