1 // { dg-do assemble  }
2 //980519 bad error from nathan
3 //$ egcs -fhonor-std -nostdinc -c redef.C
4 //redef.C:56: redefinition of default argument for `class _Traits'
5 
6 template<class _CharT> struct char_traits;
7 template<class _CharT> struct char_traits { };
8 template<> struct char_traits<char>;
9 template<> struct char_traits<char> { };
10 
11 template<class _CharT, class _Traits = char_traits<_CharT> > class istreambuf_iterator;
12 
13 
14 template<class _CharT, class _Traits>
15   class istreambuf_iterator
16 {
17  public:
18   typedef _Traits traits_type;
19   class _Proxy;
20  public:
21   inline istreambuf_iterator() throw();
22   inline istreambuf_iterator(const _Proxy& __p) throw();
23 };
24 
25 
26 template <class _CharT, class _Traits>
27   class istreambuf_iterator<_CharT,_Traits>::_Proxy
28 {
29  public:
30   _CharT operator*();
31 
32   //bug -g++  w/ decl "redef", no decl no prob.
33   //ok -edg: no warnings
34   friend class istreambuf_iterator;  //  XXX  OK?
35 
36   //bug -g++ w/ decl "redef", no decl no prob.
37   //ok -edg: no warnings
38   //friend class istreambuf_iterator<_CharT,_Traits>;
39 
40   //bug -g++ w/ decl "redef", no decl no prob.
41   //ok -edg: declaration of "_CharT" and "_Traits" hides template parameter
42   //template <class _CharT, class _Traits> friend class istreambuf_iterator;
43 
44   //ok -g++
45   //ok -edg
46   //friend class istreambuf_iterator<_CharT>;
47 
48 };
49 
50 
51 
52 //explicit instantiation of a nested class
53 template class istreambuf_iterator<char, char_traits<char> >::_Proxy;
54 
55