blob: 77ae5ae599fb396127f356eb62cb8aaec693dde4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
// { dg-do run }
// egcs-bugs 999-02-22 14:26 Stefan Schwarzer
// sts@ica1.uni-stuttgart.de
// should compile and return 0
template <int N>
struct Outer{
struct Inner{
Inner(int n): sum(n){}
typename Outer<N-1>::Inner operator[](int n) const
{ return typename Outer<N-1>::Inner(sum + n); }
int sum;
};
typename Outer<N-1>::Inner operator[](int n) const
{ return typename Outer<N-1>::Inner(n); }
};
// specializations for N==1
template<>
struct Outer<1> {
struct Inner {
Inner(int n): sum(n){}
int operator[](int n) const
{ return sum+n; }
int sum;
};
int operator[](int n) const
{ return n; }
};
int main()
{
Outer<1> sum1;
//std::cout << sum1[1] << "\n";
Outer<2> sum2;
//std::cout << sum2[1][1] << "\n";
return sum1[1] + sum2[1][1] - 3;
}
|