Issue Details (XML | Word | Printable)

Key: STDCXX-228
Type: Bug Bug
Status: Open Open
Priority: Minor Minor
Assignee: Unassigned
Reporter: Martin Sebor
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
C++ Standard Library

std::money_{get,put}<UDT> cannot be instantiated

Created: 29/Jun/06 01:33 AM   Updated: 10/Oct/07 05:03 PM
Return to search
Component/s: 22. Localization
Affects Version/s: 4.1.2, 4.1.3
Fix Version/s: None

Time Tracking:
Not Specified

Environment: all


 Description  « Hide
Moved from the Rogue Wave bug tracking database:

***Created By: sebor @ Jun 07, 2001 07:19:12 PM***
The money_get and money_put facets cannot currently be instantiated on a user-defined character type:

$ cat t.cpp

#include <locale>

int main ()
{
std::money_get<int> m;
}

$ nice make SRCS=t.cpp
eccp -c -I/build2/sebor/dev/stdlib/include/ansi --incl_suffixes :: -D_RWSTDDEBUG -D_RWSTD_USE_CONFIG -I/build/sebor/eccp-11s/include -I/build2/sebor/dev/stdlib/include -I/build2/sebor/dev/stdlib/../rwtest -I/build2/sebor/dev/stdlib/tests/include -A -B -x -g --display_error_number --diag_suppress 11,450,518 t.cpp
eccp t.o -o t -L/build/sebor/eccp-11s/lib -lstd11s -lm -L/build2/sebor/eccp-11s/tests -lrwtest11s
C++ prelinker: executing: /usr/local/edg-2.45/bin/eccp -c -I/build2/sebor/dev/stdlib/include/ansi --incl_suffixes :: -D_RWSTDDEBUG -D_RWSTD_USE_CONFIG -I/build/sebor/eccp-11s/include -I/build2/sebor/dev/stdlib/include -I/build2/sebor/dev/stdlib/../rwtest -I/build2/sebor/dev/stdlib/tests/include -A -B -x -g --display_error_number --diag_suppress 11,450,518 t.cpp
"/build2/sebor/dev/stdlib/include/rw/_money.h", line 716: error #135: class
"_rw::_rw_moneypunct_impl<int, true>" has no member "_C_ivals"
return &RW::_rw_moneypunct_impl<_CharT, _Intl>::_C_ivals;
^
detected during:
instantiation of "const _rw::_rw_moneypunct_init_data<_CharT>
*std::moneypunct<_CharT, _Intl>::_C_get_ivals() [with
_CharT=int, _Intl=true]" at line 479 of
"/build2/sebor/dev/stdlib/include/rw/_locimp.h"
instantiation of "Facet *rw::_rw_create_classic_facet(_Facet
*) [with _Facet=std::moneypunct<int, true>]" at line 507
of "/build2/sebor/dev/stdlib/include/rw/_locimp.h"
instantiation of "_rw::_rw_facet_base
*_rw::_rw_facet_maker<_Facet>::_C_maker_func(int,
const char *, size_t) [with _Facet=std::moneypunct<int,
true>]" at line 625 of
"/build2/sebor/dev/stdlib/include/rw/_locale.h"
instantiation of "const _Facet &std::use_facet<_Facet>(const
std::locale &) [with _Facet=std::moneypunct<int, true>]"
at line 155 of
"/build2/sebor/dev/stdlib/include/rw/_money.cc"
instantiation of "const _rw::_rw_moneypunct_impl_data<_CharT>
&_rw::_rw_money_handler_base_1<_CharT>::_C_get_punct_da
ta(const std::locale &, bool) [with _CharT=int]" at line
308
instantiation of "_rw::_rw_money_reader<_CharT,
InputIter>::_rw_money_reader(_InputIter &, _InputIter
&, std::ios_base &, bool) [with _CharT=int,
_InputIter=std::istreambuf_iterator<int,
std::char_traits<int>>]" at line 558 of
"/build2/sebor/dev/stdlib/include/rw/_money.cc"
instantiation of "std::money_get<_CharT, _InputIter>::iter_type
std::money_get<_CharT,
_InputIter>::do_get(std::money_get<_CharT,
_InputIter>::iter_type, std::money_get<_CharT,
_InputIter>::iter_type, bool, std::ios_base &,
std::ios_base::iostate &, long double &) const [with
_CharT=int, _InputIter=std::istreambuf_iterator<int,
std::char_traits<int>>]"

"/build2/sebor/dev/stdlib/include/rw/_money.h", line 726: error #289: no
instance of constructor "_rw::_rw_moneypunct_impl<_CharT,
Intl>::_rw_moneypunct_impl [with _CharT=int, _Intl=true]" matches
the argument list
argument types are: (const _rw::_rw_moneypunct_init_data<int> *)
RW::rw_moneypunct_impl<_CharT, _Intl>(_mp)
^
detected during:
instantiation of "std::moneypunct<_CharT,
_Intl>::moneypunct(size_t, const
_rw::_rw_moneypunct_init_data<_CharT> *) [with
_CharT=int, _Intl=true]" at line 479 of
"/build2/sebor/dev/stdlib/include/rw/_locimp.h"
instantiation of "Facet *rw::_rw_create_classic_facet(_Facet
*) [with _Facet=std::moneypunct<int, true>]" at line 507
of "/build2/sebor/dev/stdlib/include/rw/_locimp.h"
instantiation of "_rw::_rw_facet_base
*_rw::_rw_facet_maker<_Facet>::_C_maker_func(int,
const char *, size_t) [with _Facet=std::moneypunct<int,
true>]" at line 625 of
"/build2/sebor/dev/stdlib/include/rw/_locale.h"
instantiation of "const _Facet &std::use_facet<_Facet>(const
std::locale &) [with _Facet=std::moneypunct<int, true>]"
at line 155 of
"/build2/sebor/dev/stdlib/include/rw/_money.cc"
instantiation of "const _rw::_rw_moneypunct_impl_data<_CharT>
&_rw::_rw_money_handler_base_1<_CharT>::_C_get_punct_da
ta(const std::locale &, bool) [with _CharT=int]" at line
308
instantiation of "_rw::_rw_money_reader<_CharT,
InputIter>::_rw_money_reader(_InputIter &, _InputIter
&, std::ios_base &, bool) [with _CharT=int,
_InputIter=std::istreambuf_iterator<int,
std::char_traits<int>>]" at line 558 of
"/build2/sebor/dev/stdlib/include/rw/_money.cc"
instantiation of "std::money_get<_CharT, _InputIter>::iter_type
std::money_get<_CharT,
_InputIter>::do_get(std::money_get<_CharT,
_InputIter>::iter_type, std::money_get<_CharT,
_InputIter>::iter_type, bool, std::ios_base &,
std::ios_base::iostate &, long double &) const [with
_CharT=int, _InputIter=std::istreambuf_iterator<int,
std::char_traits<int>>]"

"/build2/sebor/dev/stdlib/include/rw/_codecvt.h", line 627: error #415: no
suitable constructor exists to convert from "int" to "__mbstate_t"
state_type __stt (0);
^
detected during:
instantiation of "std::codecvt<_InternT, _ExternT,
_StateT>::internal_string_type std::codecvt<_InternT,
_ExternT, _StateT>::in(const std::codecvt<_InternT,
_ExternT, _StateT>::external_string_type &) const [with
_InternT=int, _ExternT=char, _StateT=mbstate_t]" at line
87 of "/build2/sebor/dev/stdlib/include/rw/_money.cc"
instantiation of "const _rw::_rw_moneypunct_init_data<_CharT>
*_rw::_rw_fixup_moneypunct_init(const
_rw::_rw_moneypunct_init_data<char> *, _CharT *) [with
_CharT=int]" at line 140 of
"/build2/sebor/dev/stdlib/include/rw/_money.cc"
instantiation of "const _rw::_rw_moneypunct_init_data<_CharT>
*_rw::rw_moneypunct_impl_data<_CharT>::_C_get_init_by
name_(const char *, bool) [with _CharT=int]" at line 771
of "/build2/sebor/dev/stdlib/include/rw/_money.h"
instantiation of "std::moneypunct_byname<_CharT,
_Intl>::moneypunct_byname(const char *, size_t) [with
_CharT=int, _Intl=true]" at line 791 of
"/build2/sebor/dev/stdlib/include/rw/_money.h"
instantiation of "std::moneypunct<_CharT, _Intl>
*_rw::_rw_create_named_facet(std::moneypunct<_CharT,
_Intl> *, const char *, size_t) [with _CharT=int,
_Intl=true]" at line 594 of
"/build2/sebor/dev/stdlib/include/rw/_locale.h"
instantiation of "Facet *rw::_rw_create_native_facet(_Facet *)
[with _Facet=std::moneypunct<int, true>]" at line 508 of
"/build2/sebor/dev/stdlib/include/rw/_locimp.h"
instantiation of "_rw::_rw_facet_base
*_rw::_rw_facet_maker<_Facet>::_C_maker_func(int,
const char *, size_t) [with _Facet=std::moneypunct<int,
true>]" at line 625 of
"/build2/sebor/dev/stdlib/include/rw/_locale.h"
instantiation of "const _Facet &std::use_facet<_Facet>(const
std::locale &) [with _Facet=std::moneypunct<int, true>]"
at line 155 of
"/build2/sebor/dev/stdlib/include/rw/_money.cc"
instantiation of "const _rw::_rw_moneypunct_impl_data<_CharT>
&_rw::_rw_money_handler_base_1<_CharT>::_C_get_punct_da
ta(const std::locale &, bool) [with _CharT=int]" at line
308 of "/build2/sebor/dev/stdlib/include/rw/_money.h"
instantiation of "_rw::_rw_money_reader<_CharT,
InputIter>::_rw_money_reader(_InputIter &, _InputIter
&, std::ios_base &, bool) [with _CharT=int,
_InputIter=std::istreambuf_iterator<int,
std::char_traits<int>>]" at line 558 of
"/build2/sebor/dev/stdlib/include/rw/_money.cc"
instantiation of "std::money_get<_CharT, _InputIter>::iter_type
std::money_get<_CharT,
_InputIter>::do_get(std::money_get<_CharT,
_InputIter>::iter_type, std::money_get<_CharT,
_InputIter>::iter_type, bool, std::ios_base &,
std::ios_base::iostate &, long double &) const [with
_CharT=int, _InputIter=std::istreambuf_iterator<int,
std::char_traits<int>>]"

"/build2/sebor/dev/stdlib/include/rw/_money.h", line 716: error #135: class
"_rw::_rw_moneypunct_impl<int, false>" has no member "_C_ivals"
return &RW::_rw_moneypunct_impl<_CharT, _Intl>::_C_ivals;
^
detected during:
instantiation of "const _rw::_rw_moneypunct_init_data<_CharT>
*std::moneypunct<_CharT, _Intl>::_C_get_ivals() [with
_CharT=int, _Intl=false]" at line 479 of
"/build2/sebor/dev/stdlib/include/rw/_locimp.h"
instantiation of "Facet *rw::_rw_create_classic_facet(_Facet
*) [with _Facet=std::moneypunct<int, false>]" at line
507 of "/build2/sebor/dev/stdlib/include/rw/_locimp.h"
instantiation of "_rw::_rw_facet_base
*_rw::_rw_facet_maker<_Facet>::_C_maker_func(int,
const char *, size_t) [with _Facet=std::moneypunct<int,
false>]" at line 625 of
"/build2/sebor/dev/stdlib/include/rw/_locale.h"
instantiation of "const _Facet &std::use_facet<_Facet>(const
std::locale &) [with _Facet=std::moneypunct<int, false>]"
at line 159 of
"/build2/sebor/dev/stdlib/include/rw/_money.cc"
instantiation of "const _rw::_rw_moneypunct_impl_data<_CharT>
&_rw::_rw_money_handler_base_1<_CharT>::_C_get_punct_da
ta(const std::locale &, bool) [with _CharT=int]" at line
308
instantiation of "_rw::_rw_money_reader<_CharT,
InputIter>::_rw_money_reader(_InputIter &, _InputIter
&, std::ios_base &, bool) [with _CharT=int,
_InputIter=std::istreambuf_iterator<int,
std::char_traits<int>>]" at line 558 of
"/build2/sebor/dev/stdlib/include/rw/_money.cc"
instantiation of "std::money_get<_CharT, _InputIter>::iter_type
std::money_get<_CharT,
_InputIter>::do_get(std::money_get<_CharT,
_InputIter>::iter_type, std::money_get<_CharT,
_InputIter>::iter_type, bool, std::ios_base &,
std::ios_base::iostate &, long double &) const [with
_CharT=int, _InputIter=std::istreambuf_iterator<int,
std::char_traits<int>>]"

"/build2/sebor/dev/stdlib/include/rw/_money.h", line 726: error #289: no
instance of constructor "_rw::_rw_moneypunct_impl<_CharT,
Intl>::_rw_moneypunct_impl [with _CharT=int, _Intl=false]" matches
the argument list
argument types are: (const _rw::_rw_moneypunct_init_data<int> *)
RW::rw_moneypunct_impl<_CharT, _Intl>(_mp)
^
detected during:
instantiation of "std::moneypunct<_CharT,
_Intl>::moneypunct(size_t, const
_rw::_rw_moneypunct_init_data<_CharT> *) [with
_CharT=int, _Intl=false]" at line 479 of
"/build2/sebor/dev/stdlib/include/rw/_locimp.h"
instantiation of "Facet *rw::_rw_create_classic_facet(_Facet
*) [with _Facet=std::moneypunct<int, false>]" at line
507 of "/build2/sebor/dev/stdlib/include/rw/_locimp.h"
instantiation of "_rw::_rw_facet_base
*_rw::_rw_facet_maker<_Facet>::_C_maker_func(int,
const char *, size_t) [with _Facet=std::moneypunct<int,
false>]" at line 625 of
"/build2/sebor/dev/stdlib/include/rw/_locale.h"
instantiation of "const _Facet &std::use_facet<_Facet>(const
std::locale &) [with _Facet=std::moneypunct<int, false>]"
at line 159 of
"/build2/sebor/dev/stdlib/include/rw/_money.cc"
instantiation of "const _rw::_rw_moneypunct_impl_data<_CharT>
&_rw::_rw_money_handler_base_1<_CharT>::_C_get_punct_da
ta(const std::locale &, bool) [with _CharT=int]" at line
308
instantiation of "_rw::_rw_money_reader<_CharT,
InputIter>::_rw_money_reader(_InputIter &, _InputIter
&, std::ios_base &, bool) [with _CharT=int,
_InputIter=std::istreambuf_iterator<int,
std::char_traits<int>>]" at line 558 of
"/build2/sebor/dev/stdlib/include/rw/_money.cc"
instantiation of "std::money_get<_CharT, _InputIter>::iter_type
std::money_get<_CharT,
_InputIter>::do_get(std::money_get<_CharT,
_InputIter>::iter_type, std::money_get<_CharT,
_InputIter>::iter_type, bool, std::ios_base &,
std::ios_base::iostate &, long double &) const [with
_CharT=int, _InputIter=std::istreambuf_iterator<int,
std::char_traits<int>>]"

5 errors detected in the compilation of "t.cpp".

***Modified By: sebor @ May 09, 2002 02:55:00 PM***
libstd 3.0 cannot istantiate these monetray facets on UD char types either.



 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Martin Sebor made changes - 02/Mar/07 01:34 AM
Field Original Value New Value
Priority Major [ 3 ] Minor [ 4 ]