This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
[v3] use_facet<ctype> clean up
- From: Paolo Carlini <paolo dot carlini at oracle dot com>
- To: Gcc Patch List <gcc-patches at gcc dot gnu dot org>
- Cc: libstdc++ <libstdc++ at gcc dot gnu dot org>
- Date: Wed, 10 Sep 2008 23:36:58 +0200
- Subject: [v3] use_facet<ctype> clean up
Hi,
noticed today while working on 37455. Tested x86_64-linux, without PCHs,
committed to mainline.
Paolo.
/////////////////////
2008-09-10 Paolo Carlini <paolo.carlini@oracle.com>
* src/ctype.cc (use_facet<ctype<char> >, use_facet<ctype<wchar_t>):
Remove specializations.
* src/locale-inst.cc (use_facet<ctype<C> >): Instantiate.
* include/bits/locale_facets.tcc (use_facet<ctype<char> >,
use_facet<ctype<wchar_t>): Declare as extern template.
* include/bits/locale_facets.h (use_facet<ctype<char> >,
use_facet<ctype<wchar_t>): Do not declare as specializations.
Index: src/ctype.cc
===================================================================
*** src/ctype.cc (revision 140250)
--- src/ctype.cc (working copy)
*************** _GLIBCXX_BEGIN_NAMESPACE(std)
*** 53,78 ****
locale::id ctype<wchar_t>::id;
#endif
- template<>
- const ctype<char>&
- use_facet<ctype<char> >(const locale& __loc)
- {
- size_t __i = ctype<char>::id._M_id();
- const locale::_Impl* __tmp = __loc._M_impl;
- return static_cast<const ctype<char>&>(*(__tmp->_M_facets[__i]));
- }
-
- #ifdef _GLIBCXX_USE_WCHAR_T
- template<>
- const ctype<wchar_t>&
- use_facet<ctype<wchar_t> >(const locale& __loc)
- {
- size_t __i = ctype<wchar_t>::id._M_id();
- const locale::_Impl* __tmp = __loc._M_impl;
- return static_cast<const ctype<wchar_t>&>(*(__tmp->_M_facets[__i]));
- }
- #endif
-
// XXX At some point, just rename this file to ctype_configure_char.cc
// and compile it as a separate file instead of including it here.
// Platform-specific initialization code for ctype tables.
--- 53,58 ----
Index: src/locale-inst.cc
===================================================================
*** src/locale-inst.cc (revision 140250)
--- src/locale-inst.cc (working copy)
***************
*** 1,6 ****
// Locale support -*- C++ -*-
! // Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
--- 1,6 ----
// Locale support -*- C++ -*-
! // Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
*************** _GLIBCXX_END_LDBL_NAMESPACE
*** 192,198 ****
template class collate_byname<C>;
// use_facet
! // NB: use_facet<ctype> is specialized
template
const codecvt<C, char, mbstate_t>&
use_facet<codecvt<C, char, mbstate_t> >(const locale&);
--- 192,201 ----
template class collate_byname<C>;
// use_facet
! template
! const ctype<C>&
! use_facet<ctype<C> >(const locale&);
!
template
const codecvt<C, char, mbstate_t>&
use_facet<codecvt<C, char, mbstate_t> >(const locale&);
Index: include/bits/locale_facets.tcc
===================================================================
*** include/bits/locale_facets.tcc (revision 140250)
--- include/bits/locale_facets.tcc (working copy)
***************
*** 1,7 ****
// Locale support -*- C++ -*-
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
! // 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
--- 1,7 ----
// Locale support -*- C++ -*-
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
! // 2006, 2007, 2008
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
*************** _GLIBCXX_END_LDBL_NAMESPACE
*** 1284,1289 ****
--- 1284,1293 ----
extern template class ctype_byname<char>;
extern template
+ const ctype<char>&
+ use_facet<ctype<char> >(const locale&);
+
+ extern template
const numpunct<char>&
use_facet<numpunct<char> >(const locale&);
*************** _GLIBCXX_END_LDBL_NAMESPACE
*** 1319,1324 ****
--- 1323,1332 ----
extern template class ctype_byname<wchar_t>;
extern template
+ const ctype<wchar_t>&
+ use_facet<ctype<wchar_t> >(const locale&);
+
+ extern template
const numpunct<wchar_t>&
use_facet<numpunct<wchar_t> >(const locale&);
Index: include/bits/locale_facets.h
===================================================================
*** include/bits/locale_facets.h (revision 140250)
--- include/bits/locale_facets.h (working copy)
*************** _GLIBCXX_BEGIN_NAMESPACE(std)
*** 1165,1174 ****
void _M_widen_init() const;
};
- template<>
- const ctype<char>&
- use_facet<ctype<char> >(const locale& __loc);
-
#ifdef _GLIBCXX_USE_WCHAR_T
// 22.2.1.3 ctype<wchar_t> specialization
/**
--- 1165,1170 ----
*************** _GLIBCXX_BEGIN_NAMESPACE(std)
*** 1470,1479 ****
void
_M_initialize_ctype();
};
-
- template<>
- const ctype<wchar_t>&
- use_facet<ctype<wchar_t> >(const locale& __loc);
#endif //_GLIBCXX_USE_WCHAR_T
/// class ctype_byname [22.2.1.2].
--- 1466,1471 ----
Index: ChangeLog
===================================================================
*** ChangeLog (revision 140250)
--- ChangeLog (working copy)
***************
*** 1,5 ****
--- 1,15 ----
2008-09-10 Paolo Carlini <paolo.carlini@oracle.com>
+ * src/ctype.cc (use_facet<ctype<char> >, use_facet<ctype<wchar_t>):
+ Remove specializations.
+ * src/locale-inst.cc (use_facet<ctype<C> >): Instantiate.
+ * include/bits/locale_facets.tcc (use_facet<ctype<char> >,
+ use_facet<ctype<wchar_t>): Declare as extern template.
+ * include/bits/locale_facets.h (use_facet<ctype<char> >,
+ use_facet<ctype<wchar_t>): Do not declare as specializations.
+
+ 2008-09-10 Paolo Carlini <paolo.carlini@oracle.com>
+
* config/locale/darwin/ctype_members.cc (ctype<char>::_M_narrow_init,
ctype<char>::_M_widen_init): Don't define here.
* config/locale/gnu/ctype_members.cc: Likewise.