stl_alloc.h: Add extern implicit allocator instantiations.

2002-03-07  Benjamin Kosnik  <bkoz@redhat.com>

	* include/bits/stl_alloc.h: Add extern implicit allocator
	instantiations.
	* include/bits/basic_string.tcc: Tweak.
	* include/bits/locale_facets.tcc: Remove default args. Add
	has_facet, use_facet extern instantiations.
	* src/stl-inst.cc: Add explicit instantiation.
	* src/locale-inst.cc: Clean. Remove locale member template
	instantiations.

	* testsuite/22_locale/operators.cc (test02): Enable.

From-SVN: r50426
This commit is contained in:
Benjamin Kosnik 2002-03-08 06:05:21 +00:00 committed by Benjamin Kosnik
parent 5faae4f779
commit 41b4d44bac
9 changed files with 462 additions and 149 deletions

View file

@ -1,3 +1,16 @@
2002-03-07 Benjamin Kosnik <bkoz@redhat.com>
* include/bits/stl_alloc.h: Add extern implicit allocator
instantiations.
* include/bits/basic_string.tcc: Tweak.
* include/bits/locale_facets.tcc: Remove default args. Add
has_facet, use_facet extern instantiations.
* src/stl-inst.cc: Add explicit instantiation.
* src/locale-inst.cc: Clean. Remove locale member template
instantiations.
* testsuite/22_locale/operators.cc (test02): Enable.
2002-03-06 Benjamin Kosnik <bkoz@redhat.com> 2002-03-06 Benjamin Kosnik <bkoz@redhat.com>
Stephen M. Webb <stephen.webb@bregmasoft.com> Stephen M. Webb <stephen.webb@bregmasoft.com>

View file

@ -37,6 +37,7 @@ GLIBCPP_3.1 {
}; };
# Names not in an 'extern' block are mangled names. # Names not in an 'extern' block are mangled names.
_ZSt9has_facet*;
# operator new(unsigned) # operator new(unsigned)
_Znwj; _Znwj;
@ -101,4 +102,3 @@ CXXABI_1 {
local: local:
*; *;
}; };

View file

@ -2061,36 +2061,38 @@ namespace std
// Inhibit implicit instantiations for required instantiations, // Inhibit implicit instantiations for required instantiations,
// which are defined via explicit instantiations elsewhere. // which are defined via explicit instantiations elsewhere.
// NB: This syntax is a GNU extension. // NB: This syntax is a GNU extension.
extern template class vector<locale::facet*>;
extern template class moneypunct<char, false>; extern template class moneypunct<char, false>;
extern template class moneypunct<char, true>; extern template class moneypunct<char, true>;
extern template class moneypunct_byname<char, false>; extern template class moneypunct_byname<char, false>;
extern template class moneypunct_byname<char, true>; extern template class moneypunct_byname<char, true>;
extern template class money_get<char, istreambuf_iterator<char> >; extern template class money_get<char>;
extern template class money_put<char, ostreambuf_iterator<char> >; extern template class money_put<char>;
extern template class moneypunct<wchar_t, false>; extern template class moneypunct<wchar_t, false>;
extern template class moneypunct<wchar_t, true>; extern template class moneypunct<wchar_t, true>;
extern template class moneypunct_byname<wchar_t, false>; extern template class moneypunct_byname<wchar_t, false>;
extern template class moneypunct_byname<wchar_t, true>; extern template class moneypunct_byname<wchar_t, true>;
extern template class money_get<wchar_t, istreambuf_iterator<wchar_t> >; extern template class money_get<wchar_t>;
extern template class money_put<wchar_t, ostreambuf_iterator<wchar_t> >; extern template class money_put<wchar_t>;
extern template class numpunct<char>; extern template class numpunct<char>;
extern template class numpunct_byname<char>; extern template class numpunct_byname<char>;
extern template class num_get<char, istreambuf_iterator<char> >; extern template class num_get<char>;
extern template class num_put<char, ostreambuf_iterator<char> >; extern template class num_put<char>;
extern template class numpunct<wchar_t>; extern template class numpunct<wchar_t>;
extern template class numpunct_byname<wchar_t>; extern template class numpunct_byname<wchar_t>;
extern template class num_get<wchar_t, istreambuf_iterator<wchar_t> >; extern template class num_get<wchar_t>;
extern template class num_put<wchar_t, ostreambuf_iterator<wchar_t> >; extern template class num_put<wchar_t>;
extern template class __timepunct<char>; extern template class __timepunct<char>;
extern template class time_put<char, ostreambuf_iterator<char> >; extern template class time_put<char>;
extern template class time_put_byname<char, ostreambuf_iterator<char> >; extern template class time_put_byname<char>;
extern template class time_get<char, istreambuf_iterator<char> >; extern template class time_get<char>;
extern template class time_get_byname<char, istreambuf_iterator<char> >; extern template class time_get_byname<char>;
extern template class __timepunct<wchar_t>; extern template class __timepunct<wchar_t>;
extern template class time_put<wchar_t, ostreambuf_iterator<wchar_t> >; extern template class time_put<wchar_t>;
extern template class time_put_byname<wchar_t, ostreambuf_iterator<wchar_t> >; extern template class time_put_byname<wchar_t>;
extern template class time_get<wchar_t, istreambuf_iterator<wchar_t> >; extern template class time_get<wchar_t>;
extern template class time_get_byname<wchar_t, istreambuf_iterator<wchar_t> >; extern template class time_get_byname<wchar_t>;
extern template class messages<char>; extern template class messages<char>;
extern template class messages_byname<char>; extern template class messages_byname<char>;
extern template class messages<wchar_t>; extern template class messages<wchar_t>;
@ -2103,13 +2105,217 @@ namespace std
extern template class collate_byname<char>; extern template class collate_byname<char>;
extern template class collate<wchar_t>; extern template class collate<wchar_t>;
extern template class collate_byname<wchar_t>; extern template class collate_byname<wchar_t>;
extern template
const codecvt<char, char, mbstate_t>&
use_facet<codecvt<char, char, mbstate_t> >(const locale&);
extern template
const collate<char>&
use_facet<collate<char> >(const locale&);
extern template
const numpunct<char>&
use_facet<numpunct<char> >(const locale&);
extern template
const num_put<char>&
use_facet<num_put<char> >(const locale&);
extern template
const num_get<char>&
use_facet<num_get<char> >(const locale&);
extern template
const moneypunct<char, true>&
use_facet<moneypunct<char, true> >(const locale&);
extern template
const moneypunct<char, false>&
use_facet<moneypunct<char, false> >(const locale&);
extern template
const money_put<char>&
use_facet<money_put<char> >(const locale&);
extern template
const money_get<char>&
use_facet<money_get<char> >(const locale&);
extern template
const __timepunct<char>&
use_facet<__timepunct<char> >(const locale&);
extern template
const time_put<char>&
use_facet<time_put<char> >(const locale&);
extern template
const time_get<char>&
use_facet<time_get<char> >(const locale&);
extern template
const messages<char>&
use_facet<messages<char> >(const locale&);
extern template
const codecvt<wchar_t, char, mbstate_t>&
use_facet<codecvt<wchar_t, char, mbstate_t> >(locale const&);
extern template
const collate<wchar_t>&
use_facet<collate<wchar_t> >(const locale&);
extern template
const numpunct<wchar_t>&
use_facet<numpunct<wchar_t> >(const locale&);
extern template
const num_put<wchar_t>&
use_facet<num_put<wchar_t> >(const locale&);
extern template
const num_get<wchar_t>&
use_facet<num_get<wchar_t> >(const locale&);
extern template
const moneypunct<wchar_t, true>&
use_facet<moneypunct<wchar_t, true> >(const locale&);
extern template
const moneypunct<wchar_t, false>&
use_facet<moneypunct<wchar_t, false> >(const locale&);
extern template
const money_put<wchar_t>&
use_facet<money_put<wchar_t> >(const locale&);
extern template
const money_get<wchar_t>&
use_facet<money_get<wchar_t> >(const locale&);
extern template
const __timepunct<wchar_t>&
use_facet<__timepunct<wchar_t> >(const locale&);
extern template
const time_put<wchar_t>&
use_facet<time_put<wchar_t> >(const locale&);
extern template
const time_get<wchar_t>&
use_facet<time_get<wchar_t> >(const locale&);
extern template
const messages<wchar_t>&
use_facet<messages<wchar_t> >(const locale&);
extern template
bool
has_facet<ctype<char> >(const locale&);
extern template
bool
has_facet<codecvt<char, char, mbstate_t> >(const locale&);
extern template
bool
has_facet<collate<char> >(const locale&);
extern template
bool
has_facet<numpunct<char> >(const locale&);
extern template
bool
has_facet<num_put<char> >(const locale&);
extern template
bool
has_facet<num_get<char> >(const locale&);
extern template
bool
has_facet<moneypunct<char> >(const locale&);
extern template
bool
has_facet<money_put<char> >(const locale&);
extern template
bool
has_facet<money_get<char> >(const locale&);
extern template
bool
has_facet<__timepunct<char> >(const locale&);
extern template
bool
has_facet<time_put<char> >(const locale&);
extern template
bool
has_facet<time_get<char> >(const locale&);
extern template
bool
has_facet<messages<char> >(const locale&);
extern template
bool
has_facet<ctype<wchar_t> >(const locale&);
extern template
bool
has_facet<codecvt<wchar_t, char, mbstate_t> >(const locale&);
extern template
bool
has_facet<collate<wchar_t> >(const locale&);
extern template
bool
has_facet<numpunct<wchar_t> >(const locale&);
extern template
bool
has_facet<num_put<wchar_t> >(const locale&);
extern template
bool
has_facet<num_get<wchar_t> >(const locale&);
extern template
bool
has_facet<moneypunct<wchar_t> >(const locale&);
extern template
bool
has_facet<money_put<wchar_t> >(const locale&);
extern template
bool
has_facet<money_get<wchar_t> >(const locale&);
extern template
bool
has_facet<__timepunct<wchar_t> >(const locale&);
extern template
bool
has_facet<time_put<wchar_t> >(const locale&);
extern template
bool
has_facet<time_get<wchar_t> >(const locale&);
extern template
bool
has_facet<messages<wchar_t> >(const locale&);
} // namespace std } // namespace std
#endif #endif

View file

@ -922,6 +922,11 @@ struct _Alloc_traits<_Tp, __allocator<_Tp1, __debug_alloc<_Alloc> > >
}; };
//@} //@}
// Inhibit implicit instantiations for required instantiations,
// which are defined via explicit instantiations elsewhere.
// NB: This syntax is a GNU extension.
extern template class allocator<char>;
extern template class allocator<wchar_t>;
} // namespace std } // namespace std
#endif /* __GLIBCPP_INTERNAL_ALLOC_H */ #endif /* __GLIBCPP_INTERNAL_ALLOC_H */

View file

@ -43,126 +43,124 @@
namespace std namespace std
{ {
typedef ostreambuf_iterator<char> obuf_iterator;
typedef istreambuf_iterator<char> ibuf_iterator;
typedef ostreambuf_iterator<wchar_t> wobuf_iterator;
typedef istreambuf_iterator<wchar_t> wibuf_iterator;
// moneypunct, money_get, and money_put // moneypunct, money_get, and money_put
template class moneypunct<char, false>; template class moneypunct<char, false>;
template class moneypunct<char, true>; template class moneypunct<char, true>;
template class moneypunct_byname<char, false>; template class moneypunct_byname<char, false>;
template class moneypunct_byname<char, true>; template class moneypunct_byname<char, true>;
template class money_get<char, ibuf_iterator>; template class money_get<char, istreambuf_iterator<char> >;
template class money_put<char, obuf_iterator>; template class money_put<char, ostreambuf_iterator<char> >;
#ifdef _GLIBCPP_USE_WCHAR_T #ifdef _GLIBCPP_USE_WCHAR_T
template class moneypunct<wchar_t, false>; template class moneypunct<wchar_t, false>;
template class moneypunct<wchar_t, true>; template class moneypunct<wchar_t, true>;
template class moneypunct_byname<wchar_t, false>; template class moneypunct_byname<wchar_t, false>;
template class moneypunct_byname<wchar_t, true>; template class moneypunct_byname<wchar_t, true>;
template class money_get<wchar_t, wibuf_iterator>; template class money_get<wchar_t, istreambuf_iterator<wchar_t> >;
template class money_put<wchar_t, wobuf_iterator>; template class money_put<wchar_t, ostreambuf_iterator<wchar_t> >;
#endif #endif
// numpunct, numpunct_byname, num_get, and num_put // numpunct, numpunct_byname, num_get, and num_put
template class numpunct<char>; template class numpunct<char>;
template class numpunct_byname<char>; template class numpunct_byname<char>;
template class num_get<char, ibuf_iterator>; template class num_get<char, istreambuf_iterator<char> >;
template class num_put<char, obuf_iterator>; template class num_put<char, ostreambuf_iterator<char> >;
template template
obuf_iterator ostreambuf_iterator<char>
num_put<char, obuf_iterator>:: num_put<char, ostreambuf_iterator<char> >::
_M_convert_int(obuf_iterator, ios_base&, char, char, char, long) const; _M_convert_int(ostreambuf_iterator<char>, ios_base&, char, char, char,
long) const;
template template
obuf_iterator ostreambuf_iterator<char>
num_put<char, obuf_iterator>:: num_put<char, ostreambuf_iterator<char> >::
_M_convert_int(obuf_iterator, ios_base&, char, char, char, _M_convert_int(ostreambuf_iterator<char>, ios_base&, char, char, char,
unsigned long) const; unsigned long) const;
#ifdef _GLIBCPP_USE_LONG_LONG #ifdef _GLIBCPP_USE_LONG_LONG
template template
obuf_iterator ostreambuf_iterator<char>
num_put<char, obuf_iterator>:: num_put<char, ostreambuf_iterator<char> >::
_M_convert_int(obuf_iterator, ios_base&, char, char, char, _M_convert_int(ostreambuf_iterator<char>, ios_base&, char, char, char,
long long) const; long long) const;
template template
obuf_iterator ostreambuf_iterator<char>
num_put<char, obuf_iterator>:: num_put<char, ostreambuf_iterator<char> >::
_M_convert_int(obuf_iterator, ios_base&, char, char, char, _M_convert_int(ostreambuf_iterator<char>, ios_base&, char, char, char,
unsigned long long) const; unsigned long long) const;
#endif #endif
template template
obuf_iterator ostreambuf_iterator<char>
num_put<char, obuf_iterator>:: num_put<char, ostreambuf_iterator<char> >::
_M_convert_float(obuf_iterator, ios_base&, char, char, double) const; _M_convert_float(ostreambuf_iterator<char>, ios_base&, char, char,
double) const;
template template
obuf_iterator ostreambuf_iterator<char>
num_put<char, obuf_iterator>:: num_put<char, ostreambuf_iterator<char> >::
_M_convert_float(obuf_iterator, ios_base&, char, char, _M_convert_float(ostreambuf_iterator<char>, ios_base&, char, char,
long double) const; long double) const;
#ifdef _GLIBCPP_USE_WCHAR_T #ifdef _GLIBCPP_USE_WCHAR_T
template class numpunct<wchar_t>; template class numpunct<wchar_t>;
template class numpunct_byname<wchar_t>; template class numpunct_byname<wchar_t>;
template class num_get<wchar_t, wibuf_iterator>; template class num_get<wchar_t, istreambuf_iterator<wchar_t> >;
template class num_put<wchar_t, wobuf_iterator>; template class num_put<wchar_t, ostreambuf_iterator<wchar_t> >;
template template
wobuf_iterator ostreambuf_iterator<wchar_t>
num_put<wchar_t, wobuf_iterator>:: num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
_M_convert_int(wobuf_iterator, ios_base&, wchar_t, char, char, long) const; _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char,
char, long) const;
template template
wobuf_iterator ostreambuf_iterator<wchar_t>
num_put<wchar_t, wobuf_iterator>:: num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
_M_convert_int(wobuf_iterator, ios_base&, wchar_t, char, char, _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char,
unsigned long) const; char, unsigned long) const;
#ifdef _GLIBCPP_USE_LONG_LONG #ifdef _GLIBCPP_USE_LONG_LONG
template template
wobuf_iterator ostreambuf_iterator<wchar_t>
num_put<wchar_t, wobuf_iterator>:: num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
_M_convert_int(wobuf_iterator, ios_base&, wchar_t, char, char, _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char,
long long) const; char, long long) const;
template template
wobuf_iterator ostreambuf_iterator<wchar_t>
num_put<wchar_t, wobuf_iterator>:: num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
_M_convert_int(wobuf_iterator, ios_base&, wchar_t, char, char, _M_convert_int(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char,
unsigned long long) const; char, unsigned long long) const;
#endif #endif
template template
wobuf_iterator ostreambuf_iterator<wchar_t>
num_put<wchar_t, wobuf_iterator>:: num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
_M_convert_float(wobuf_iterator, ios_base&, wchar_t, char, _M_convert_float(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char,
double) const; double) const;
template template
wobuf_iterator ostreambuf_iterator<wchar_t>
num_put<wchar_t, wobuf_iterator>:: num_put<wchar_t, ostreambuf_iterator<wchar_t> >::
_M_convert_float(wobuf_iterator, ios_base&, wchar_t, char, _M_convert_float(ostreambuf_iterator<wchar_t>, ios_base&, wchar_t, char,
long double) const; long double) const;
#endif #endif
// time_get and time_put // time_get and time_put
template class __timepunct<char>; template class __timepunct<char>;
template class time_put<char, obuf_iterator>; template class time_put<char, ostreambuf_iterator<char> >;
template class time_put_byname<char, obuf_iterator>; template class time_put_byname<char, ostreambuf_iterator<char> >;
template class time_get<char, ibuf_iterator>; template class time_get<char, istreambuf_iterator<char> >;
template class time_get_byname<char, ibuf_iterator>; template class time_get_byname<char, istreambuf_iterator<char> >;
#ifdef _GLIBCPP_USE_WCHAR_T #ifdef _GLIBCPP_USE_WCHAR_T
template class __timepunct<wchar_t>; template class __timepunct<wchar_t>;
template class time_put<wchar_t, wobuf_iterator>; template class time_put<wchar_t, ostreambuf_iterator<wchar_t> >;
template class time_put_byname<wchar_t, wobuf_iterator>; template class time_put_byname<wchar_t, ostreambuf_iterator<wchar_t> >;
template class time_get<wchar_t, wibuf_iterator>; template class time_get<wchar_t, istreambuf_iterator<wchar_t> >;
template class time_get_byname<wchar_t, wibuf_iterator>; template class time_get_byname<wchar_t, istreambuf_iterator<wchar_t> >;
#endif #endif
// messages // messages
@ -198,18 +196,7 @@ namespace std
#endif #endif
// use_facet // use_facet
template // NB: use_facet<ctype> is specialized
const numpunct<char>&
use_facet<numpunct<char> >(const locale&);
template
const num_put<char, obuf_iterator >&
use_facet<num_put<char, obuf_iterator> >(const locale&);
template
const num_get<char, ibuf_iterator >&
use_facet<num_get<char, ibuf_iterator> >(const locale&);
template template
const codecvt<char, char, mbstate_t>& const codecvt<char, char, mbstate_t>&
use_facet<codecvt<char, char, mbstate_t> >(const locale&); use_facet<codecvt<char, char, mbstate_t> >(const locale&);
@ -218,6 +205,18 @@ namespace std
const collate<char>& const collate<char>&
use_facet<collate<char> >(const locale&); use_facet<collate<char> >(const locale&);
template
const numpunct<char>&
use_facet<numpunct<char> >(const locale&);
template
const num_put<char>&
use_facet<num_put<char> >(const locale&);
template
const num_get<char>&
use_facet<num_get<char> >(const locale&);
template template
const moneypunct<char, true>& const moneypunct<char, true>&
use_facet<moneypunct<char, true> >(const locale&); use_facet<moneypunct<char, true> >(const locale&);
@ -226,23 +225,31 @@ namespace std
const moneypunct<char, false>& const moneypunct<char, false>&
use_facet<moneypunct<char, false> >(const locale&); use_facet<moneypunct<char, false> >(const locale&);
template
const money_put<char>&
use_facet<money_put<char> >(const locale&);
template
const money_get<char>&
use_facet<money_get<char> >(const locale&);
template template
const __timepunct<char>& const __timepunct<char>&
use_facet<__timepunct<char> >(const locale&); use_facet<__timepunct<char> >(const locale&);
template
const time_put<char>&
use_facet<time_put<char> >(const locale&);
template
const time_get<char>&
use_facet<time_get<char> >(const locale&);
template
const messages<char>&
use_facet<messages<char> >(const locale&);
#ifdef _GLIBCPP_USE_WCHAR_T #ifdef _GLIBCPP_USE_WCHAR_T
template
const numpunct<wchar_t>&
use_facet<numpunct<wchar_t> >(const locale&);
template
const num_put<wchar_t, wobuf_iterator>&
use_facet<num_put<wchar_t, wobuf_iterator> >(const locale&);
template
const num_get<wchar_t, wibuf_iterator>&
use_facet<num_get<wchar_t, wibuf_iterator> >(const locale&);
template template
const codecvt<wchar_t, char, mbstate_t>& const codecvt<wchar_t, char, mbstate_t>&
use_facet<codecvt<wchar_t, char, mbstate_t> >(locale const&); use_facet<codecvt<wchar_t, char, mbstate_t> >(locale const&);
@ -251,6 +258,18 @@ namespace std
const collate<wchar_t>& const collate<wchar_t>&
use_facet<collate<wchar_t> >(const locale&); use_facet<collate<wchar_t> >(const locale&);
template
const numpunct<wchar_t>&
use_facet<numpunct<wchar_t> >(const locale&);
template
const num_put<wchar_t>&
use_facet<num_put<wchar_t> >(const locale&);
template
const num_get<wchar_t>&
use_facet<num_get<wchar_t> >(const locale&);
template template
const moneypunct<wchar_t, true>& const moneypunct<wchar_t, true>&
use_facet<moneypunct<wchar_t, true> >(const locale&); use_facet<moneypunct<wchar_t, true> >(const locale&);
@ -259,71 +278,146 @@ namespace std
const moneypunct<wchar_t, false>& const moneypunct<wchar_t, false>&
use_facet<moneypunct<wchar_t, false> >(const locale&); use_facet<moneypunct<wchar_t, false> >(const locale&);
template
const money_put<wchar_t>&
use_facet<money_put<wchar_t> >(const locale&);
template
const money_get<wchar_t>&
use_facet<money_get<wchar_t> >(const locale&);
template template
const __timepunct<wchar_t>& const __timepunct<wchar_t>&
use_facet<__timepunct<wchar_t> >(const locale&); use_facet<__timepunct<wchar_t> >(const locale&);
template
const time_put<wchar_t>&
use_facet<time_put<wchar_t> >(const locale&);
template
const time_get<wchar_t>&
use_facet<time_get<wchar_t> >(const locale&);
template
const messages<wchar_t>&
use_facet<messages<wchar_t> >(const locale&);
#endif #endif
// has_facet // has_facet
template
bool
has_facet<ctype<char> >(const locale&);
template
bool
has_facet<codecvt<char, char, mbstate_t> >(const locale&);
template
bool
has_facet<collate<char> >(const locale&);
template template
bool bool
has_facet<numpunct<char> >(const locale&); has_facet<numpunct<char> >(const locale&);
template template
bool bool
has_facet<num_put<char> >(const locale&); has_facet<num_put<char> >(const locale&);
template template
bool bool
has_facet<num_get<char> >(const locale&); has_facet<num_get<char> >(const locale&);
template template
bool bool
has_facet<ctype<char> >(const locale&); has_facet<moneypunct<char> >(const locale&);
template
bool
has_facet<money_put<char> >(const locale&);
template
bool
has_facet<money_get<char> >(const locale&);
template
bool
has_facet<__timepunct<char> >(const locale&);
template
bool
has_facet<time_put<char> >(const locale&);
template
bool
has_facet<time_get<char> >(const locale&);
template
bool
has_facet<messages<char> >(const locale&);
#ifdef _GLIBCPP_USE_WCHAR_T #ifdef _GLIBCPP_USE_WCHAR_T
template
bool
has_facet<numpunct<wchar_t> >(const locale&);
template
bool
has_facet<num_put<wchar_t> >(const locale&);
template
bool
has_facet<num_get<wchar_t> >(const locale&);
template template
bool bool
has_facet<ctype<wchar_t> >(const locale&); has_facet<ctype<wchar_t> >(const locale&);
#endif
//
// iterator
//
typedef vector<locale::facet*> vec_pfacet;
template
void
vec_pfacet::
insert(vec_pfacet::iterator, vec_pfacet::size_type,
const vec_pfacet::value_type&);
template
void
vec_pfacet::
_M_fill_insert(vec_pfacet::iterator, vec_pfacet::size_type,
const vec_pfacet::value_type&);
//
// locale
//
typedef istreambuf_iterator<char, char_traits<char> > istreambuf_iter;
typedef ostreambuf_iterator<char, char_traits<char> > ostreambuf_iter;
#ifdef _GLIBCPP_USE_WCHAR_T
typedef istreambuf_iterator<wchar_t, char_traits<wchar_t> > wistreambuf_iter;
typedef ostreambuf_iterator<wchar_t, char_traits<wchar_t> > wostreambuf_iter;
#endif
template template
bool bool
locale::operator()(const string&, const string&) const; has_facet<codecvt<wchar_t, char, mbstate_t> >(const locale&);
template
bool
has_facet<collate<wchar_t> >(const locale&);
template
bool
has_facet<numpunct<wchar_t> >(const locale&);
template
bool
has_facet<num_put<wchar_t> >(const locale&);
template
bool
has_facet<num_get<wchar_t> >(const locale&);
template
bool
has_facet<moneypunct<wchar_t> >(const locale&);
template
bool
has_facet<money_put<wchar_t> >(const locale&);
template
bool
has_facet<money_get<wchar_t> >(const locale&);
template
bool
has_facet<__timepunct<wchar_t> >(const locale&);
template
bool
has_facet<time_put<wchar_t> >(const locale&);
template
bool
has_facet<time_get<wchar_t> >(const locale&);
template
bool
has_facet<messages<wchar_t> >(const locale&);
#endif
// iterator
typedef vector<locale::facet*> vec_pfacet;
template class vector<locale::facet*>;
template class __normal_iterator<locale::facet**, vector<locale::facet*> >;
template class __normal_iterator<locale::facet* const*,
vector<locale::facet*> >;
// locale
template template
char* char*
__add_grouping<char>(char*, char, char const*, char const*, __add_grouping<char>(char*, char, char const*, char const*,
@ -344,12 +438,6 @@ namespace std
streamsize, streamsize, const bool); streamsize, streamsize, const bool);
#ifdef _GLIBCPP_USE_WCHAR_T #ifdef _GLIBCPP_USE_WCHAR_T
template
bool
locale::operator()(const wstring&, const wstring&) const;
typedef ostreambuf_iterator<wchar_t> wostreambuf_iter;
template template
wchar_t* wchar_t*
__add_grouping<wchar_t>(wchar_t*, wchar_t, char const*, char const*, __add_grouping<wchar_t>(wchar_t*, wchar_t, char const*, char const*,

View file

@ -63,7 +63,7 @@ namespace std
const size_t locale::_S_num_categories; const size_t locale::_S_num_categories;
const size_t locale::_S_num_facets; const size_t locale::_S_num_facets;
// Definitions for locale::id of standard facets. // Definitions for locale::id of standard facets that are specialized.
locale::id ctype<char>::id; locale::id ctype<char>::id;
locale::id codecvt<char, char, mbstate_t>::id; locale::id codecvt<char, char, mbstate_t>::id;

View file

@ -34,11 +34,12 @@
#include <bits/c++config.h> #include <bits/c++config.h>
#include <memory> #include <memory>
#include <vector> #include <vector>
#include <ostream>
#include <map>
namespace std namespace std
{ {
template class allocator<char>;
template class allocator<wchar_t>;
template class __malloc_alloc_template<0>; template class __malloc_alloc_template<0>;
#ifndef __USE_MALLOC #ifndef __USE_MALLOC

View file

@ -1,6 +1,6 @@
// 2000-09-11 Benjamin Kosnik <bkoz@redhat.com> // 2000-09-11 Benjamin Kosnik <bkoz@redhat.com>
// Copyright (C) 2000, 2001 Free Software Foundation // Copyright (C) 2000, 2001, 2002 Free Software Foundation
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
@ -47,9 +47,9 @@ void test01()
} }
// bool operator()(const string_type&, const string_type&) const // bool operator()(const string_type&, const string_type&) const
typedef std::collate<char> ccollate;
long gnu_count; long gnu_count;
class gnu_collate: public ccollate
class gnu_collate: public std::collate<char>
{ {
protected: protected:
virtual int virtual int
@ -79,7 +79,7 @@ void test02()
int main () int main ()
{ {
test01(); test01();
test02();
return 0; return 0;
} }