
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.