Here you will find a collection of software utilities that I have put together and used over the last few years. Many of these (but not all) I have described at one time or another in my column in the C++ Report. I don't see any point in repeating the information in the columns here, but at the same time a certain amount of "documentation" is usually appreciated for even the smallest and most self explanatory classes.

Disclaimers: Besides all the usually versions such as AS IS - WITHOUT WARRENTY OF ANY KIND, etc (see the legal section for details), I want to add a couple of special caveats.

First, I do not guarantee that this code will even compile on any C++ platform. It is true that most of this code started out as real code on one project or another and so once upon a time it did compile. By the time it got written up in the C++ Report however, it had usually gone through at least a couple of transformations. Besides the usuall goals of eliminating vendor and project specific details, there was also the overriding goal of making the code be Standard C++ compliant. My goal in the column has always been to describe features of Standard C++ and not any particular vendor's version. Since I do not have a Standard C++ compiler available (yet), I can not actually claim that any of this code really is Standard C++. What I did was take my best guess at what the code should look like given my understanding of the C++ Standard. What that probably means in practice is that I got it close enought to Standard C++ that it won't compile on anything except a fairly Standard compliant compiler, but I probably didn't get it absolutely correct. Or the compilers still haven't got it correct. A lot of this code is based upon advanced features of Standard C++ (and the Standard C++ Library). It uses templates (including member templates), partial specialization, namespaces, RTTI, and exceptions. Many of these things are missing, or are still problematic, for most compilers.

Secondly, I do not guarantee that if you get them to compile that they will run correctly. This is simply because the code is based upon my interpretation of the Standard. I may be wrong. Or I may be right and the compiler may be wrong. In either case, what I thought I wrote may not be what the compiler actually does. One particular extra caution needs to be thrown in here: several parts of this code depends upon parts of the Standard Library. Some of these "parts" are obscure and apparently little used in ordinary programming. I have repeatedly encountered library implementations that were erroneous. So, Beware.

With those qualification, I will note that I have versions (with modifications) of several of these utilities running on Windows NT/98 using MSVC++ v6 and on GNU/Linux using the latest G++ compiler. I am working on other ports.

File Organization

Coding styles (stdext.h, headers, implementations, nameing conventions, exceptions).

Whats there












, this means that more often than not the code I presented would not compile on any compiler that I had available. While the compilers have steadily gotten better, and closer to the Standard, I would usually try to make the code conform to Standard C++ syntax before I would write it up. This would often mean some extensive changes from the version that was actually being used somewhere.