Go to the first, previous, next, last section, table of contents.

What are the differences between g++ and the ARM specification of C++?

As of version 2.7.0, g++ has exception support on most but not all platforms (no support on MIPS-based platforms yet), but it doesn't work right if optimizaton is enabled, which means the exception implementation is still not really ready for production use.

Some features that the ANSI/ISO standardization committee has voted in that don't appear in the ARM are supported, notably the mutable keyword, in version 2.5.x. 2.6.x adds support for the built-in boolean type bool, with constants true and false. The beginnings of run-time type identification are present, so there are more reserved words: typeid, static_cast, reinterpret_cast, const_cast, and dynamic_cast.

As with any beta-test compiler, there are bugs. You can help improve the compiler by submitting detailed bug reports.

One of the weakest areas of g++ other than templates is the resolution of overloaded functions and operators in complex cases. The usual symptom is that in a case where the ARM says that it is ambiguous which function should be chosen, g++ chooses one (often the first one declared). This is usually not a problem when porting C++ code from other compilers to g++, but shows up as errors when code developed under g++ is ported to other compilers. (I believe this is no longer a significant problem in 2.7.0).

[A full bug list would be very long indeed, so I won't put one here. I may add a list of frequently-reported bugs and "non-bugs" like the static class members issue mentioned above].


Go to the first, previous, next, last section, table of contents.