
Perhaps I wasn't clear enough: if the user wants to use intmax_t, he needs to make it available explicitly by including <stdint.h> before mpfr.h (see below). Then INTMAX_C gets defined (in C).
OK understood.
I don't think there are much problems with the next C++ standard. We don't know very much about users who use MPFR with their C++ programs, but I think that in practice, such users who want the stdint types always include <stdint.h> as documented in the MPFR manual, and in this case, intmax_t is available in the global namespace, according to <http://en.wikipedia.org/wiki/Stdint.h>.
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. Sorry, but I think you're going to have to deal with this going forward whatever Boost does, HTH, John.