annotate gcc/testsuite/g++.old-deja/g++.law/visibility13.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // { dg-do assemble }
kono
parents:
diff changeset
2 // GROUPS passed visibility
kono
parents:
diff changeset
3 // visibility file
kono
parents:
diff changeset
4 // From: dinh@cs.ucla.edu (Dinh Le)
kono
parents:
diff changeset
5 // Date: Mon, 12 Jul 93 22:21:06 -0700
kono
parents:
diff changeset
6 // Subject: class, template and their scoping problem
kono
parents:
diff changeset
7 // Message-ID: <9307130521.AA18312@oahu.cs.ucla.edu>
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 #include <iostream>
kono
parents:
diff changeset
10 #include <cassert>
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 // --------------- Array.h && Array.cc ------------------
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 using namespace std;
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 const int ArraySize = 12;
kono
parents:
diff changeset
17
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
18 template <class> class Array_RC;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
19
111
kono
parents:
diff changeset
20 template <class Type>
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
21 class Array {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
22 friend class Array_RC<Type>;
111
kono
parents:
diff changeset
23 public:
kono
parents:
diff changeset
24 Array(const Type *ar, int sz) { init(ar,sz); }
kono
parents:
diff changeset
25 virtual ~Array() { delete [] ia; }
kono
parents:
diff changeset
26 virtual void print(ostream& = cout);
kono
parents:
diff changeset
27 virtual Type& operator[](int ix) { return ia[ix]; }
kono
parents:
diff changeset
28 private:
kono
parents:
diff changeset
29 void init(const Type*, int);
kono
parents:
diff changeset
30 int size;
kono
parents:
diff changeset
31 int *ia;
kono
parents:
diff changeset
32 };
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 template <class Type>
kono
parents:
diff changeset
35 ostream& operator<<( ostream& os, Array<Type>& ar )
kono
parents:
diff changeset
36 {
kono
parents:
diff changeset
37 ar.print(os);
kono
parents:
diff changeset
38 return os;
kono
parents:
diff changeset
39 }
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 template <class Type>
kono
parents:
diff changeset
42 void Array<Type>::print(ostream& os)
kono
parents:
diff changeset
43 {
kono
parents:
diff changeset
44 const int lineLength = 12;
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 os << "( " << size << " )< ";
kono
parents:
diff changeset
47 for (int ix = 0; ix < size; ++ix) {
kono
parents:
diff changeset
48 if (ix % lineLength == 0 && ix) os << "\n\t";
kono
parents:
diff changeset
49 os << ia[ ix ];
kono
parents:
diff changeset
50
kono
parents:
diff changeset
51 if (ix % lineLength != lineLength-1 &&
kono
parents:
diff changeset
52 ix != size-1)
kono
parents:
diff changeset
53 os << ", ";
kono
parents:
diff changeset
54 }
kono
parents:
diff changeset
55 os << " >\n";
kono
parents:
diff changeset
56 }
kono
parents:
diff changeset
57
kono
parents:
diff changeset
58 template <class Type>
kono
parents:
diff changeset
59 void Array<Type>::init(const Type *array, int sz)
kono
parents:
diff changeset
60 {
kono
parents:
diff changeset
61 ia = new Type[size = sz];
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 for (int ix = 0; ix < size; ++ix)
kono
parents:
diff changeset
64 ia[ix] = (array!=0) ? array[ix] : (Type)0;
kono
parents:
diff changeset
65 }
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 // --------------- Array_RC.h && Array_RC.cc ----------------
kono
parents:
diff changeset
68
kono
parents:
diff changeset
69 template <class Type>
kono
parents:
diff changeset
70 class Array_RC : public Array<Type> {
kono
parents:
diff changeset
71 public:
kono
parents:
diff changeset
72 Array_RC(const Type *ar, int sz);
kono
parents:
diff changeset
73 Type& operator[](int ix);
kono
parents:
diff changeset
74 };
kono
parents:
diff changeset
75
kono
parents:
diff changeset
76 template <class Type>
kono
parents:
diff changeset
77 Array_RC<Type>::Array_RC(const Type *ar, int sz) : Array<Type>(ar, sz) {}
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 template <class Type>
kono
parents:
diff changeset
80 Type &Array_RC<Type>::operator[](int ix) {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
81 assert(ix >= 0 && ix < this->size);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
82 return this->ia[ix];
111
kono
parents:
diff changeset
83 }
kono
parents:
diff changeset
84
kono
parents:
diff changeset
85 // ------------------- Test routine ----------------------
kono
parents:
diff changeset
86
kono
parents:
diff changeset
87 template <class Type>
kono
parents:
diff changeset
88 void try_array( Array<Type> &iA )
kono
parents:
diff changeset
89 {
kono
parents:
diff changeset
90 cout << "try_array: initial array values:\n";
kono
parents:
diff changeset
91 cout << iA << endl;
kono
parents:
diff changeset
92 }
kono
parents:
diff changeset
93
kono
parents:
diff changeset
94 template <class Type>
kono
parents:
diff changeset
95 inline void
kono
parents:
diff changeset
96 try_array( Array_RC<Type> &rc )
kono
parents:
diff changeset
97 {
kono
parents:
diff changeset
98 try_array( ((Array<Type>&)rc) );
kono
parents:
diff changeset
99 }
kono
parents:
diff changeset
100
kono
parents:
diff changeset
101 int main()
kono
parents:
diff changeset
102 {
kono
parents:
diff changeset
103 static int ia[10] = { 12, 7, 14, 9, 128, 17, 6, 3, 27, 5 };
kono
parents:
diff changeset
104 Array_RC<int> iA(ia, 10);
kono
parents:
diff changeset
105
kono
parents:
diff changeset
106 cout << "template Array_RC class" << endl;
kono
parents:
diff changeset
107 try_array(iA);
kono
parents:
diff changeset
108
kono
parents:
diff changeset
109 return 0;
kono
parents:
diff changeset
110 }
kono
parents:
diff changeset
111
kono
parents:
diff changeset
112 template class Array_RC<int>;