I'm investigating support for decimal floating-point arithmetic in G++. GCC currently supports this functionality in C for several targets based on ISO/IEC TR 24732. The C support adds 3 new scalar types: _Decimal32, _Decimal64, and _Decimal128. With support for mangling those types and defining typedefs to the underlying type modes, G++ already passes almost all of GCC's decimal float tests.
The C++ standards committee defined quite different support for C++ in ISO/IEC DTR 24733, "Extension for the programming language C++ to support decimal floating-point arithmetic". It defines the support in terms of classes decimal32, decimal64, and decimal128 in namespace decimal, defined in <decimal>, and allows decimal floating-point literals as a conforming extension. If libstdc++ support can depend on compiler support for the decimal float type modes then the support is straightforward, with classes that contain a data member of the type mode. The only tricky part is passing arguments and return values in a way that is compatible with C, since one is a scalar and the other is a class. This affects not just intercallability between user code written in C and C++, but also access to the decimal float math functions defined for both C and C++. Given that libstdc++ is used with compilers other than G++, is it allowable to depend on non-standard C++ compiler support? An alternative is for the libstdc++ support to use decNumber and/or libbid, but that would be less efficient and more time-consuming to implement. Both TRs are available online: C: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1312.pdf C++: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2849.pdf Janis