
On 2010-02-16 09:34:22 -0000, John Maddock wrote:
No the problem with the next C++ std is *exactly* the same as with Boost:
#include <cstdint> // perhaps indirectly via some other #include or std lib header. #include <mpfr.h> // error: no ::intmax_t even though INTMAX_C is defined (in practice may depend on the implementation - but this is what the std says should happen).
Contrary to your expectations it is normal in C++ to include the C++ headers such as <cstdint> and *not* the "legacy" C headers such as <stdint.h> to avoid polluting the global namespace.
OK, but in practice, that's a bit more complex: users may need legacy C headers. Note that MPFR is first a library written in C, for developers writing their programs in C (there are also third-party interfaces to other languages, though). Some conventional additions to mpfr.h have been done to allow one to use <mpfr.h> in C++ software, but since MPFR is for C primarily, this means that all the types are in the global namespace. This may not be ideal, but some users accept this way of doing (rather than using a MPFR C++ interface). I've looked at the C++0x draft N3000 (November 2009), and <stdint.h> is mentioned (Section 18.4.2); so, it is still part of the standard. But even though Boost appears to work as if <cstdint> were included, the <stdint.h> legacy C header is still unavailable on some platforms (according to the bug report we got) if the user wants to include it too, and I now think that's the main problem. So, either you should tell your users that Boost may no longer be compatible with legacy C headers and if they want to use C libraries, they should use only pure C++ interfaces to them, or a way to use legacy C headers should be documented. Perhaps a general rule should be (I haven't tried): if the user needs to include legacy C headers, he should always include them before C++ headers. -- Vincent Lefèvre <vincent@vinc17.net> - Web: <http://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / Arénaire project (LIP, ENS-Lyon)