[gnu.g++.bug] Strange g++ feature/bug

schmidt%glacier.ics.uci.edu@ORION.CF.UCI.EDU ("Douglas C. Schmidt") (11/21/88)

Hi,

   I'm not sure if the following code works due to any intentional G++
design feature, but it is certainly interesting!  I seem to be able to
create anonymous recursively defined structures, use casts to manage
dynamically created linked lists, and not have to worry about
introducing a conflicting type name into the global namespace.  This
appears to solve a particularly nasty defect of C and C++, i.e.,
inability to hide type names inside of classes ( the Ada folks always
snicker at this flaw, unfortunately ).

   Naturally, the AT&T translator chewed this up and spit it back out,
so I suspect it is *not* a planned and portable feature for G++?!

Doug

----------------------------------------
#include <stream.h>

class Linked_List {

private:

   struct { // No name for struct
      int     i;
      struct *link;  // Anonymous recursive link field! 
   } *Head, *Temp;

public:
   Linked_List ( int Size ) { // warning: completely brain-damaged code ahead!
      Head    = ( void * ) new char [ sizeof ( *Head ) ];
      Head->i = 0;
      Temp    = Head;

      for ( int i = 1; i < Size; i++ ) {
         Temp->link = ( void * ) new char [ sizeof ( *Head ) ];
         Temp       = ( void * ) Temp->link;
         Temp->i    = i;
      }

      Temp->link = 0;
   }

  ~Linked_List ( void ) { // Print out the contents of the anonymous list!

      for ( Temp = ( void * ) Head; Temp; Temp = ( void * ) Temp->link ) {
         cout << Temp->i << "\n";
      }

   }
};

main ( int, char *argv [ ] ) {
   Linked_List List ( atoi ( argv [ 1 ] ) );
}