// Build don't link: 
// GROUPS passed old-abort
/*
   I received the following message when using g++ (version 2.3.3):

   main.cc: In method 'Implicit<implicit<INTEGER,2>,3>::Implicit()':
   main.cc: Internal compiler error 241.
   main.cc: Please report this to 'bug-g++@prep.ai.mit.edu'
   */

#include <iostream>

class INTEGER {
int x;
public:
   typedef int BASE;
   INTEGER(int y) : x(y) {}
   INTEGER() {}
   void encode() { std::cout << "Integer encoder";}
   int operator=(int y) { x=y; return x; }
   operator int() {return x; }
};

template< class T,  int n> class Implicit : public T {
   public:
     typedef typename T::BASE BASE;
     Implicit(BASE value ): T(value) {};
     Implicit() : T() {};
     int myTag() { return n; }
     void encode() { T::encode(); }
     BASE operator=(BASE t) { return T::operator=(t); }
};

int
main() 
{
  Implicit<Implicit<INTEGER, 2> ,  3> y;

  y = 10;
};



