47 lines
823 B
C
47 lines
823 B
C
// { 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;
|
|
}
|