On Thu, Sep 13, 2012 at 1:40 AM, Stefan Teleman <stefan.tele...@gmail.com> wrote:
> The performance of 22.locale.numpunct.mt is also much better with your > _numpunct.h patch: > > real 668.93 > user 804.00 > sys 34.24 Unfortunately, the resulting facet is non-conformant. For this simple test case: #include <locale> #include <cstdio> #include <cstdlib> template<class _CharT> class my_numpunct : public std::numpunct<_CharT> { public: typedef _CharT char_type; explicit my_numpunct<_CharT>() : std::numpunct<_CharT>() { } ~my_numpunct () { } protected: virtual char_type do_decimal_point () const { std::printf("Hello, my name is my_numpunct::do_decimal_point.\n"); return std::numpunct<_CharT>::do_decimal_point (); } virtual std::string do_grouping () const { std::printf("Hello, my name is my_numpunct::do_grouping.\n"); return std::numpunct<_CharT>::do_grouping (); } }; int main(int argc, char* argv[]) { if (argc != 2) { std::fprintf(stderr, "Usage: %s <locale-name>\n", argv[0]); return -1; } std::locale l(argv[1]); std::locale loc(l, new my_numpunct<char> ()); my_numpunct<char> const& fac = std::use_facet<my_numpunct<char> > (loc); char dp = fac.decimal_point(); char ts = fac.thousands_sep(); std::string gr = fac.grouping(); std::string tn = fac.truename(); std::fprintf(stderr, "dp = '%c' ts = '%c' gr = \"%s\" tn = \"%s\"\n", dp, ts, gr.c_str(), tn.c_str()); return 0; } I expect the following output: [steleman@darthvader][/src/steleman/programming/stdcxx-ss122/stdcxx-4.2.1/tests/localization][09/15/2012 1:44:35][1134]>> ./22.locale.numpunct.stefan-1-gcc en_US.utf-8 Hello, my name is my_numpunct::do_decimal_point. Hello, my name is my_numpunct::do_grouping. dp = '.' ts = ',' gr = "" tn = "true" I get this instead: [steleman@darthvader][/src/steleman/programming/stdcxx-intel/stdcxx-4.2.1-thread-safe/build/tests][09/14/2012 22:31:22][1449]>> ./22.locale.numpunct.stefan-1 en_US.utf-8 dp = '.' ts = ',' gr = "" tn = "true" --Stefan -- Stefan Teleman KDE e.V. stefan.tele...@gmail.com