Rationale
    
    
    
   
        Locales
        
            Locales have a very close relation to string processing. They contain information about
            the character sets and are used, for example, to change the case of characters and 
            to classify the characters. 
        
        
            C++ allows to work with multiple different instances of locales at once. If an algorithm
            manipulates some data in a way that requires the usage of locales, there must be a way
            to specify them. However, one instance of locales is sufficient for most of the applications,
            and for a user it could be very tedious to specify which locales to use at every place 
            where it is needed. 
         
        
            Fortunately, the C++ standard allows to specify the global locales (using static member
            function std:locale::global()). When instantiating an
            std::locale class without explicit information, the instance will 
            be initialized with the global locale. This implies, that if an algorithm needs a locale,
            it should have an std::locale parameter defaulting to  std::locale().
            If a user needs to specify locales explicitly, she can do so. Otherwise the global
            locales are used.
        
    
    
        Regular Expressions
        
            Regular expressions are an essential part of text processing. For this reason, the library 
            also provides regex variants of some algorithms. The library does not attempt to replace
            Boost.Regex; it merely wraps its functionality in a new interface.
            As a part of this library, regex algorithms integrate smoothly with other components, which 
            brings additional value.