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// <strstream>
11
12// class strstreambuf
13
14// strstreambuf(void* (*palloc_arg)(size_t), void (*pfree_arg)(void*));
15
16#include <strstream>
17#include <cassert>
18
19int called = 0;
20
21void* my_alloc(std::size_t n)
22{
23    static char buf[10000];
24    ++called;
25    return buf;
26}
27
28void my_free(void*)
29{
30    ++called;
31}
32
33struct test
34    : std::strstreambuf
35{
36    test(void* (*palloc_arg)(size_t), void (*pfree_arg)(void*))
37        : std::strstreambuf(palloc_arg, pfree_arg) {}
38    virtual int_type overflow(int_type c)
39        {return std::strstreambuf::overflow(c);}
40};
41
42int main()
43{
44    {
45        test s(my_alloc, my_free);
46        assert(called == 0);
47        s.overflow('a');
48        assert(called == 1);
49    }
50    assert(called == 2);
51}
52