OSDN Git Service

* call.c (add_candidates): Add first_arg and return_type parms.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.old-deja / g++.brendan / nest21.C
1 // { dg-do run  }
2 // GROUPS passed nested-classes
3 #include <iostream>
4 #include <cstdio>
5 #include <cstring>
6
7 static char output[1024];
8
9 class BDDRetrace {
10 public:
11     class Dump {
12     public:
13         virtual Dump& operator<<(char c) = 0;
14         virtual Dump& operator<<(int i) = 0;
15         virtual Dump& operator<<(double r) = 0;
16     };
17
18     class Dump1: public Dump {
19     public:
20         Dump& operator<<(char c);
21         Dump& operator<<(int i);
22         Dump& operator<<(double r);
23     };
24 };
25
26 class Dump2: public BDDRetrace::Dump {
27 public:
28     BDDRetrace::Dump& operator<<(char c);
29     BDDRetrace::Dump& operator<<(int i);
30     BDDRetrace::Dump& operator<<(double r);
31 };
32
33 BDDRetrace::Dump&
34 BDDRetrace::Dump1::operator<<(char c)
35 { char tempout[1024];
36   std::sprintf(tempout, "%s%s%c", output, "1-", c);
37   std::strcpy(output, tempout);
38   return *this;
39 }
40
41 BDDRetrace::Dump&
42 BDDRetrace::Dump1::operator<<(int i)
43 { char tempout[1024];
44   std::sprintf (tempout, "%s%s%d", output, "1-", i);
45   std::strcpy (output, tempout);
46   return *this; }
47
48 BDDRetrace::Dump&
49 BDDRetrace::Dump1::operator<<(double r)
50 { char tempout[1024];
51   std::sprintf (tempout, "%s%s%1.0f", output, "1-", r);
52   std::strcpy (output, tempout);
53   return *this; }
54
55 BDDRetrace::Dump&
56 Dump2::operator<<(char c)
57 { char tempout[1024];
58   std::sprintf (tempout, "%s%s%c", output, "2-", c);
59   std::strcpy (output, tempout);
60   return *this; }
61
62 BDDRetrace::Dump&
63 Dump2::operator<<(int i)
64 { char tempout[1024];
65   std::sprintf (tempout, "%s%s%d", output, "2-", i);
66   std::strcpy (output, tempout);
67   return *this; }
68
69 BDDRetrace::Dump&
70 Dump2::operator<<(double r)
71 { char tempout[1024];
72   std::sprintf (tempout, "%s%s%1.0f", output, "2-", r);
73   std::strcpy (output, tempout);
74   return *this; }
75
76 int main()
77 {
78     BDDRetrace::Dump1 d1;
79     Dump2 d2;
80
81     std::sprintf (output, " ");
82
83     d1 << 'a';
84     d1 << 1;
85     d1 << 1.0;
86
87     d2 << 'a';
88     d2 << 1;
89     d2 << 1.0;
90
91     if (std::strcmp (output, " 1-a1-11-12-a2-12-1") == 0)
92       std::printf ("PASS\n");
93     else
94       { std::printf ("FAIL\n"); return 1; }
95
96     return 0;
97 }