1// 2001-06-21  Benjamin Kosnik  <bkoz@redhat.com>
2
3// Copyright (C) 2001 Free Software Foundation, Inc.
4//
5// This file is part of the GNU ISO C++ Library.  This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 2, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License along
17// with this library; see the file COPYING.  If not, write to the Free
18// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19// USA.
20
21// 24.4.2.5 Template class insert_iterator
22
23#include <iterator>
24#include <list>
25
26void test01()
27{
28  using namespace std;
29
30  // Check for required base class.
31  list<int> l;
32  list<int>::iterator li;
33
34  typedef insert_iterator<list<int> > test_iterator;
35  typedef iterator<output_iterator_tag, void, void, void, void> base_iterator;
36  test_iterator  r_it(l, li);
37  base_iterator* base = &r_it;
38
39  // Check for required typedefs
40  typedef test_iterator::value_type value_type;
41  typedef test_iterator::difference_type difference_type;
42  typedef test_iterator::pointer pointer;
43  typedef test_iterator::reference reference;
44  typedef test_iterator::iterator_category iteratory_category;
45  typedef test_iterator::container_type container_type;
46}
47
48
49
50// Make sure iterator can be instantiated.
51template class std::insert_iterator<std::list<int> >;
52
53void test02()
54{
55  typedef std::insert_iterator<std::list<int> > iterator_type;
56
57  std::list<int> li;
58  std::list<int>::iterator liit;
59  iterator_type it01(li, liit);
60  iterator_type it02 = std::inserter(li, liit);
61}
62
63// Check data member 'container' accessible.
64class test_dm : public std::insert_iterator<std::list<int> >
65{
66  container_type l;
67  container_type::iterator i;
68  container_type* p;
69public:
70  test_dm(): std::insert_iterator<std::list<int> >(l, i), p(container) { }
71};
72
73int main()
74{
75  test01();
76  test02();
77  return 0;
78}
79