
On Apr 25, 2004, at 9:29 PM, Peter Dimov wrote:
In fact, it isn't even clear to me why you need to synchronize access to the implementation at all, as std::locale is immutable; it has no non-const member functions.
Ah, I think I see the confusion. locale is mutable. The copy ctor mutates the rhs (though not visibly) and the assignment mutates both sides. There's more refcounting running around under locale's hood than just the shared_ptr to the implementation. In addition each facet is individually refcounted (but not with shared_ptr). Even std::use_facet potentially mutates a locale (via lazy addition of a standard facet to the locale). This latter technique is one of the main (portable) ways typically used to drop the code size of HelloWorld down from astronomical. http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/PDTR18015.pdf -Howard