Subject: Re: [boost] [locale] Review
From: Noah Roberts (roberts.noah_at_[hidden])
Date: 2011-04-15 21:04:55


On 4/15/2011 3:53 PM, Noah Roberts wrote:
> - What is your evaluation of the design?
>
> Functions. Seems straight forward to use.
>
>
> - What is your evaluation of the implementation?
>
> What I used worked. I did not look over the source.

Actually, I ran into what I would call a bug.

#include <boost/locale.hpp>
#include <boost/lexical_cast.hpp>

#include <iostream>

using namespace boost::locale;

int main()
{
   generator gen;

    std::locale::global(gen("fr_CA.UTF-8"));
   //std::locale::global(std::locale(""));

   std::string dbl = boost::lexical_cast<std::string>(3.14);
   std::cout << dbl << std::endl;

   std::cin.get();
}

My language settings currently use ',' as decimal separator as do the
settings for the french (Canada) language settings.

The commented out version outputs "3,14000000001". This is what I would
expect to happen. The boost::locale version outputs "3.14000000001".

It looks to me like the punctuation stuff isn't being set up correctly.
  The as::number thing doesn't do anything either. Only locale::format
catches on and does it right.

I managed to get it going by hacking around a bit. Not sure if what I'm
doing is actually close to anything that might be what it should be...

std::locale loc0(gen(""));
std::locale loc1("");
std::locale::global(std::locale(loc0, loc1, std::locale::all));

I'd expect that the delimiters and such would be set up the same in both
cases and this merge attempt of mine shouldn't be necessary.