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
22class test
23 : public std::ios
24{
25public:
26 test()
27 {
28 init(sb: 0);
29 }
30};
31
32bool f1_called = false;
33bool f2_called = false;
34bool f3_called = false;
35
36void 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
49void 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
62void 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
75int main(int, char**)
76{
77 {
78 test t;
79 std::ios_base& b = t;
80 b.register_callback(fn: f1, index: 4);
81 b.register_callback(fn: f2, index: 5);
82 b.register_callback(fn: f3, index: 6);
83 }
84 assert(f1_called);
85 assert(f2_called);
86 assert(f3_called);
87
88 return 0;
89}
90

source code of libcxx/test/std/input.output/iostreams.base/ios.base/ios.base.cons/dtor.pass.cpp