delta@CSL36H.NCSU.EDU (Thomas Hildebrandt) (12/07/89)
I believe that a correctly functioning compiler always terminates, so that when it does not do so, one may immediately conclude that he has uncovered a bug. Since the code which causes the bug appears to be erroneous, and correct code compiles successfully, the bug can be considered rather trivial, and therefore be assigned a low priority. The G++ version is 1.34, the environment is a VAX 3600 running DEC's version of UNIX (Ultrix, or whatever they call it), I can find the version number for you, but the error appears to be of the machine-independent variety. (I'm sure you also hope so.) I have isolated the function which causes the error. Code follows. Thomas H. Hildebrandt delta@csl.ncsu.edu H: (919)851-9528 W: (919)737-7610 FAX(919)737-3027 #include "dict.h" #include "misc.h" typedef FILE* FILE_; declare(dict,FILE_); dict(FILE_) Filenames; void close_files(void) // G++.1.34 compiler hangs in this function. { Filenames.map(fclose); } // misc.hpp #ifndef MISCH #define MISCH #include <stdio.h> FILE* get_file(string Filename, string Control); #endif // DICT.H #ifndef DICTH #define DICTH #include "define.h" #include "generic.h" struct item { string name; void* value_; item* next_; }; typedef void (*PVFVP)(void*); class dictionary { item* list_; public: dictionary(void){list_ = NULL;} ~dictionary(void); void insert(string Name, void* Value_); // Insert Value_ into dictionary, indexed by Name. void* find(string Name); // Search dictionary for entry Name and return its value. void remove(string Name); // Find the entry indexed by Name and delete it. void map(PVFVP); // Map the function to all dictionary entries. }; #define dict(type) name2(type,dict) #define dictdeclare(type) \ typedef void (*PVFtype)(type); \ struct dict(type):dictionary\ {\ void insert(string Name, type Value_) { dictionary::insert(Name, Value_); }\ type find(string Name) { return (type) dictionary::find(Name); }\ void remove(string Name) {dictionary::remove(Name);}\ void map(PVFtype fcn_) {dictionary::map((PVFVP) fcn_); } \ }; #endif // P.S. Have fun.