+2002-03-05 Paolo Carlini <pcarlini@unitus.it>
+
+ libstdc++/5816
+ * include/bits/locale_facets.tcc
+ (num_get::_M_extract_float): Fix the parsing of __dec, since
+ the standard prescribes that if no grouping characters are
+ seen, no grouping check is applied.
+ * testsuite/22_locale/num_get_members_char.cc: Add test05
+ distilled from the PR.
+ * testsuite/22_locale/num_get_members_wchar_t.cc: Ditto.
+
2002-03-04 Craig Rodrigues <rodrigc@gcc.gnu.org>
* docs/html/17_intro/porting-howto.xml: Refer to
}
else if (__c == __dec && !__found_dec)
{
- __found_grouping += static_cast<char>(__sep_pos);
+ // According to the standard, if no grouping chars are seen,
+ // no grouping check is applied. Therefore __found_grouping
+ // must be adjusted only if __dec comes after some __sep.
+ if (__found_grouping.size())
+ __found_grouping += static_cast<char>(__sep_pos);
++__pos;
__xtrc += '.';
__c = *(++__beg);
istringstream iss;
- // A locale that expects grouping
+ // A locale that expects grouping
locale loc_de("de_DE");
iss.imbue(loc_de);
VERIFY( ul == 0776 );
}
+// libstdc++/5816
+void test05()
+{
+ using namespace std;
+
+ double d = 0.0;
+
+ istringstream iss;
+ locale loc_de("de_DE");
+ iss.imbue(loc_de);
+
+ const num_get<char>& ng = use_facet<num_get<char> >(iss.getloc());
+ const ios_base::iostate goodbit = ios_base::goodbit;
+ ios_base::iostate err = ios_base::goodbit;
+
+ iss.str("1234,5 ");
+ err = goodbit;
+ ng.get(iss.rdbuf(), 0, iss, err, d);
+ VERIFY( err == goodbit );
+ VERIFY( d == 1234.5 );
+}
+
int main()
{
test01();
test02();
test03();
test04();
+ test05();
return 0;
}
VERIFY( err == goodbit );
VERIFY( ul == 0776 );
}
+
+// libstdc++/5816
+void test05()
+{
+ using namespace std;
+
+ double d = 0.0;
+
+ wistringstream iss;
+ locale loc_de("de_DE");
+ iss.imbue(loc_de);
+
+ const num_get<wchar_t>& ng = use_facet<num_get<wchar_t> >(iss.getloc());
+ const ios_base::iostate goodbit = ios_base::goodbit;
+ ios_base::iostate err = ios_base::goodbit;
+
+ iss.str(L"1234,5 ");
+ err = goodbit;
+ ng.get(iss.rdbuf(), 0, iss, err, d);
+ VERIFY( err == goodbit );
+ VERIFY( d == 1234.5 );
+}
#endif
int main()
test02();
test03();
test04();
+ test05();
#endif
return 0;
}