locale_facets.tcc (num_put::_M_insert_float): Do not pass precision when using hexfloat format.
* include/bits/locale_facets.tcc (num_put::_M_insert_float): Do not pass precision when using hexfloat format. * src/c++98/locale_facets.cc (__num_base::_S_format_float): Always output precision if C99 hexfloat conversion specifiers not available. From-SVN: r216001
This commit is contained in:
parent
c168f18072
commit
9d07d890e6
@ -1,3 +1,10 @@
|
||||
2014-10-08 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
* include/bits/locale_facets.tcc (num_put::_M_insert_float): Do not
|
||||
pass precision when using hexfloat format.
|
||||
* src/c++98/locale_facets.cc (__num_base::_S_format_float): Always
|
||||
output precision if C99 hexfloat conversion specifiers not available.
|
||||
|
||||
2014-10-08 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
* include/bits/regex.h (regex_token_iterator::_M_end_of_seq): Add
|
||||
|
@ -988,20 +988,32 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
|
||||
__num_base::_S_format_float(__io, __fbuf, __mod);
|
||||
|
||||
#ifdef _GLIBCXX_USE_C99
|
||||
// Precision is always used except for hexfloat format.
|
||||
const bool __use_prec =
|
||||
(__io.flags() & ios_base::floatfield) != ios_base::floatfield;
|
||||
|
||||
// First try a buffer perhaps big enough (most probably sufficient
|
||||
// for non-ios_base::fixed outputs)
|
||||
int __cs_size = __max_digits * 3;
|
||||
char* __cs = static_cast<char*>(__builtin_alloca(__cs_size));
|
||||
if (__use_prec)
|
||||
__len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
|
||||
__fbuf, __prec, __v);
|
||||
else
|
||||
__len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
|
||||
__fbuf, __v);
|
||||
|
||||
// If the buffer was not large enough, try again with the correct size.
|
||||
if (__len >= __cs_size)
|
||||
{
|
||||
__cs_size = __len + 1;
|
||||
__cs = static_cast<char*>(__builtin_alloca(__cs_size));
|
||||
if (__use_prec)
|
||||
__len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
|
||||
__fbuf, __prec, __v);
|
||||
else
|
||||
__len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
|
||||
__fbuf, __v);
|
||||
}
|
||||
#else
|
||||
// Consider the possibility of long ios_base::fixed outputs
|
||||
|
@ -71,7 +71,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
|
||||
ios_base::fmtflags __fltfield = __flags & ios_base::floatfield;
|
||||
|
||||
#ifdef _GLIBCXX_USE_C99
|
||||
// Precision is always used except for hexfloat format.
|
||||
if (__fltfield != (ios_base::fixed | ios_base::scientific))
|
||||
#endif
|
||||
{
|
||||
// As per DR 231: not only when __flags & ios_base::fixed || __prec > 0
|
||||
*__fptr++ = '.';
|
||||
|
Loading…
Reference in New Issue
Block a user