## C++ issues

The following documents some miscellaneous C++ issues.

Templates
RTTI
Type of NULL
Precompiled headers

### Templates

wxWindows does not use templates since it is a notoriously unportable feature.

### RTTI

wxWindows does not use run-time type information since wxWindows provides its own run-time type information system, implemented using macros.

### Type of NULL

Some compilers (e.g. the native IRIX cc) define NULL to be 0L so that no conversion to pointers is allowed. Because of that, all these occurrences of NULL in the GTK port use an explicit conversion such as

      wxWindow *my_window = (wxWindow*) NULL;

It is recommended to adhere to this in all code using wxWindows as this make the code (a bit) more portable.

### Precompiled headers

Some compilers, such as Borland C++ and Microsoft C++, support precompiled headers. This can save a great deal of compiling time. The recommended approach is to precompile `"wx.h"`, using this precompiled header for compiling both wxWindows itself and any wxWindows applications. For Windows compilers, two dummy source files are provided (one for normal applications and one for creating DLLs) to allow initial creation of the precompiled header.

However, there are several downsides to using precompiled headers. One is that to take advantage of the facility, you often need to include more header files than would normally be the case. This means that changing a header file will cause more recompilations (in the case of wxWindows, everything needs to be recompiled since everything includes `"wx.h"`!)

A related problem is that for compilers that don't have precompiled headers, including a lot of header files slows down compilation considerably. For this reason, you will find (in the common X and Windows parts of the library) conditional compilation that under Unix, includes a minimal set of headers; and when using Visual C++, includes `wx.h`. This should help provide the optimal compilation for each compiler, although it is biased towards the precompiled headers facility available in Microsoft C++.