locale_facets.tcc (num_put<>::do_put(bool)): Cast to a signed type, long according to the resolution of DR 359.
2004-08-22 Paolo Carlini <pcarlini@suse.de> * include/bits/locale_facets.tcc (num_put<>::do_put(bool)): Cast to a signed type, long according to the resolution of DR 359. * testsuite/22_locale/num_put/put/char/9.cc: New. * testsuite/22_locale/num_put/put/wchar_t/9.cc: New. * include/bits/locale_facets.tcc (num_put<>::do_put(const void*)): Simplify a bit: no need to clear showpos. From-SVN: r86382
This commit is contained in:
parent
efd610a684
commit
44e91562ed
|
@ -1,3 +1,13 @@
|
|||
2004-08-22 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
* include/bits/locale_facets.tcc (num_put<>::do_put(bool)): Cast
|
||||
to a signed type, long according to the resolution of DR 359.
|
||||
* testsuite/22_locale/num_put/put/char/9.cc: New.
|
||||
* testsuite/22_locale/num_put/put/wchar_t/9.cc: New.
|
||||
|
||||
* include/bits/locale_facets.tcc (num_put<>::do_put(const void*)):
|
||||
Simplify a bit: no need to clear showpos.
|
||||
|
||||
2004-08-21 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
* include/bits/char_traits.h (struct _Char_traits_match): Remove,
|
||||
|
|
|
@ -1160,8 +1160,8 @@ namespace std
|
|||
const ios_base::fmtflags __flags = __io.flags();
|
||||
if ((__flags & ios_base::boolalpha) == 0)
|
||||
{
|
||||
unsigned long __uv = __v;
|
||||
__s = _M_insert_int(__s, __io, __fill, __uv);
|
||||
const long __l = __v;
|
||||
__s = _M_insert_int(__s, __io, __fill, __l);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1238,8 +1238,7 @@ namespace std
|
|||
const void* __v) const
|
||||
{
|
||||
const ios_base::fmtflags __flags = __io.flags();
|
||||
const ios_base::fmtflags __fmt = ~(ios_base::showpos
|
||||
| ios_base::basefield
|
||||
const ios_base::fmtflags __fmt = ~(ios_base::basefield
|
||||
| ios_base::uppercase
|
||||
| ios_base::internal);
|
||||
__io.flags(__flags & __fmt | (ios_base::hex | ios_base::showbase));
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
// 2004-08-22 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
// Copyright (C) 2004 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 2, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING. If not, write to the Free
|
||||
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
// USA.
|
||||
|
||||
// 22.2.2.2.1 num_put members
|
||||
|
||||
#include <locale>
|
||||
#include <sstream>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
// According to 22.2.2.2.2, p23 and the resolution of DR 359
|
||||
// val must be casted to a signed type: this can be revealed
|
||||
// by ios_base::showpos, which is effective only for signed
|
||||
// types (also see libstdc++/15565 about this).
|
||||
void test01()
|
||||
{
|
||||
using namespace std;
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
// basic construction
|
||||
locale loc_c = locale::classic();
|
||||
|
||||
// sanity check the data is correct.
|
||||
const string empty;
|
||||
|
||||
// cache the num_put facet
|
||||
ostringstream oss;
|
||||
oss.imbue(loc_c);
|
||||
const num_put<char>& np = use_facet<num_put<char> >(oss.getloc());
|
||||
|
||||
bool b = true;
|
||||
np.put(oss.rdbuf(), oss, ' ', b);
|
||||
VERIFY( oss.str() == "1" );
|
||||
|
||||
oss.str(empty);
|
||||
oss.clear();
|
||||
oss.setf(ios_base::showpos);
|
||||
np.put(oss.rdbuf(), oss, ' ', b);
|
||||
VERIFY( oss.str() == "+1" );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
// 2004-08-22 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
// Copyright (C) 2004 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 2, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING. If not, write to the Free
|
||||
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
// USA.
|
||||
|
||||
// 22.2.2.2.1 num_put members
|
||||
|
||||
#include <locale>
|
||||
#include <sstream>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
// According to 22.2.2.2.2, p23 and the resolution of DR 359
|
||||
// val must be casted to a signed type: this can be revealed
|
||||
// by ios_base::showpos, which is effective only for signed
|
||||
// types (also see libstdc++/15565 about this).
|
||||
void test01()
|
||||
{
|
||||
using namespace std;
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
// basic construction
|
||||
locale loc_c = locale::classic();
|
||||
|
||||
// sanity check the data is correct.
|
||||
const wstring empty;
|
||||
|
||||
// cache the num_put facet
|
||||
wostringstream oss;
|
||||
oss.imbue(loc_c);
|
||||
const num_put<wchar_t>& np = use_facet<num_put<wchar_t> >(oss.getloc());
|
||||
|
||||
bool b = true;
|
||||
np.put(oss.rdbuf(), oss, L' ', b);
|
||||
VERIFY( oss.str() == L"1" );
|
||||
|
||||
oss.str(empty);
|
||||
oss.clear();
|
||||
oss.setf(ios_base::showpos);
|
||||
np.put(oss.rdbuf(), oss, L' ', b);
|
||||
VERIFY( oss.str() == L"+1" );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue