// egcs-bugs 999-02-22 14:26 Stefan Schwarzer // sts@ica1.uni-stuttgart.de // should compile and return 0 template struct Outer{ struct Inner{ Inner(int n): sum(n){} typename Outer::Inner operator[](int n) const { return typename Outer::Inner(sum + n); } int sum; }; typename Outer::Inner operator[](int n) const { return typename Outer::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; }