libc++ fails to extract a valid float/double literal when it is followed
by any special characters that can also be found in a float value,
in this case, f (https://llvm.org/bugs/show_bug.cgi?id=17782).
This commit works around the problem by not putting the "f" suffix into
the string for extraction.
The tests are failing under OS X/clang, but it isn't obvious to me why.
This commit simplifies the test code by ignoring the stringstream I/O
status, and reorganizes it to be clearer whether it's the initial
conversion to string that is failing, or the subsequent conversion back
from string.
make_literal is losing some precision when making literal floating
point values because it uses digits10, but that only gives us the
number of decimal digits that will survive a decimal->native>decimal
conversion; what we are doing is a native->decimal->native conversion,
which requires the user of ::max_digits10 (which is 2 (double) or 3
(float) larger than ::digits10).
max_digits10 is a c++11 feature, however, so this commit uses
digits10 + 3 when the c++11 numeric_limits isn't available.