Subject: Re: [boost] Boost.Convert+Boost.Parameter
From: Vladimir Batov (batov_at_[hidden])
Date: 2009-02-24 04:04:34


>> convert<string, int>(str, default_ = -1)
>>
> No. That assignment doesn't assign a variable; it creates a binding.

Dave, I am glad you are confident there is no MT issue here. Apologies for
being somewhat obtuse but what I see is

    namespace convert
    {
      BOOST_PARAMETER_NAME(value)
    }

results in

    namespace convert
    {
      namespace tag { struct value; } // keyword tag type

      namespace // unnamed
      {
        // A reference to the keyword object
        boost::parameter::keyword<tag::value>& _value
        = boost::parameter::keyword<tag::value>::get();
      }
    }

My interpretation of the code above that it is a declaration of "_value" as
a reference. Then, I call the same thing twice as below:

convert<string, int>(str, _value = -1);
convert<string, int>(str, _value = -2);

Does not the *same* _value reference is used in *both* calls? I.e. after the
first call "_value" references -1 and after the second call it
references -2. If so, then, when two calls above called from different
threads we might have a problem, isn't it? If it is not the case, I am
really curious how you, guys, did that, it is surely looks magic. Any
pointers, additional docs, anything?

Thanks,
V.