OSDN Git Service

9cad3051aeba40d9224cb1e55dddf2a33d4f236f
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / testsuite / 27_io / basic_iostream / 3.cc
1 // 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
2
3 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
4 // Free Software Foundation, Inc.
5 //
6 // This file is part of the GNU ISO C++ Library.  This library is free
7 // software; you can redistribute it and/or modify it under the
8 // terms of the GNU General Public License as published by the
9 // Free Software Foundation; either version 2, or (at your option)
10 // any later version.
11
12 // This library is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 // GNU General Public License for more details.
16
17 // You should have received a copy of the GNU General Public License along
18 // with this library; see the file COPYING.  If not, write to the Free
19 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
20 // USA.
21
22 // 27.8.1.1 - Template class basic_filebuf 
23 // NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
24
25 #include <iostream>
26 #include <testsuite_hooks.h>
27
28 // { dg-do compile }
29
30 // libstdc++/2020
31 // should be able to use custom char_type, custom traits type
32 class gnu_char_type
33 {
34   unsigned long character;
35 public:
36   // operator ==
37   bool
38   operator==(const gnu_char_type& __lhs) 
39   { return character == __lhs.character; }
40
41   // operator <
42   bool
43   operator<(const gnu_char_type& __lhs) 
44   { return character < __lhs.character; }
45
46   // default ctor
47   gnu_char_type() { }
48
49   // to_char_type
50   gnu_char_type(const unsigned long& __l) : character(__l) { } 
51
52   // to_int_type
53   operator unsigned long() const { return character; }
54 };
55
56 // char_traits specialization
57 struct gnu_char_traits
58 {
59   typedef gnu_char_type char_type;
60   typedef long                  int_type;
61   typedef long          pos_type;
62   typedef unsigned long         off_type;
63   typedef long                  state_type;
64   
65   static void 
66   assign(char_type& __c1, const char_type& __c2) { }
67   
68   static bool 
69   eq(const char_type& __c1, const char_type& __c2) { return true; }
70   
71   static bool 
72   lt(const char_type& __c1, const char_type& __c2) { return true; }
73   
74   static int 
75   compare(const char_type* __s1, const char_type* __s2, size_t __n)
76   { return 0; }
77   
78   static size_t
79   length(const char_type* __s) { return 0; }
80   
81   static const char_type* 
82   find(const char_type* __s, size_t __n, const char_type& __a)
83   { return __s; }
84   
85   static char_type* 
86   move(char_type* __s1, const char_type* __s2, size_t __n)
87   { return __s1; }
88   
89   static char_type* 
90   copy(char_type* __s1, const char_type* __s2, size_t __n)
91   { return __s1; }
92   
93   static char_type* 
94   assign(char_type* __s, size_t __n, char_type __a)
95   { return __s; }
96   
97   static char_type 
98   to_char_type(const int_type& __c)
99   { return char_type(); }
100   
101   static int_type 
102   to_int_type(const char_type& __c)
103   { return int_type(); }
104   
105   static bool 
106   eq_int_type(const int_type& __c1, const int_type& __c2)
107   { return true; }
108   
109   static int_type 
110   eof()
111   { return int_type(); }
112   
113   static int_type 
114   not_eof(const int_type& __c)
115   { return int_type(); }
116 };
117
118 void test07()
119 {
120   bool test = true;
121   typedef std::basic_iostream<gnu_char_type, gnu_char_traits> gnu_iostr;
122
123   try
124     { 
125       gnu_iostr obj(NULL); 
126     }
127   catch(std::exception& obj)
128     { 
129       test = false; 
130       VERIFY( test );
131     }
132 }
133
134 #if !__GXX_WEAK__
135 // Explicitly instantiate for systems with no COMDAT or weak support.
136 template 
137   std::basic_streambuf<gnu_char_type>::int_type
138   std::basic_streambuf<gnu_char_type>::_S_pback_size;
139 #endif
140
141 int main() 
142 {
143   test07();
144   return 0;
145 }
146
147
148
149 // more surf!!!