std::locale::locale

From Cppreference

Jump to: navigation, search
Defined in header <locale>

locale();
(1)
locale( const locale& other );
(2)
explicit locale( const char* std_name );
(3)
explicit locale( const std::string& std_name );
(4)
locale( const locale& other, const char* std_name, category );
(5)
locale( const locale& other, const std::string& std_name, category );
(6)
template< class Facet >
locale( const locale& other, Facet* f );
(7)
locale( const locale& other, const locale& one, category );
(8)

1) Constructs a copy of the global C++ locale (that is, the locale most recently used as the argument to std::locale::global or a copy of std::locale::classic if no call to std::locale::global has been made.

2) Constructs a copy of other.

3-4) Constructs a copy of the system locale with specified std_name (such as "C", or "POSIX", or "en_US.UTF-8", or "English_US.1251"), if such locale is supported by the operating system. The locale constructed in this manner has a name.

5-6) Constructs a copy of other except for all the facets identified by the category argument, which are copied from the system locale identified by its std_name. The locale constructed in this manner has the same name as other.

7) Constructs a copy of other except for the facet of type Facet (typically deduced from the type of the argument) which is installed from the argument facet. If facet is NULL, the constructed locale is a full copy of other, The locale constructed in this manner has no name.

8) Constructs a copy of other except for all the facets identified by the category argument, which are copied from one. If both other and one have names, then the resulting locale also has a name.

[edit] Exceptions

1-2)
noexcept specification:  
noexcept

  (C++11 feature)

3-6) std::runtime_error if the operating system has no locale named std_name or (3) and 5) only) if std_name is NULL.

[edit] Example

#include <iostream>
#include <locale>
#include <codecvt>
int main()
{
    std::locale l1;  // l1 is a copy of the classic "C" locale
    std::locale l2("en_US.UTF-8"); // l2 is a unicode locale
    std::locale l3(l1, l2, std::locale::ctype); // l3 is "C" except for ctype, which is unicode
    std::locale l4(l1, new std::codecvt_utf8<wchar_t>); // l4 is "C" except for codecvt
    std::cout << "Locale names:\nl1: " << l1.name() << "\nl2: " << l2.name()
               << "\nl3: " << l3.name() << "\nl4: " << l4.name() << '\n';
}

Output:

Locale names:
l1: C
l2: en_US.UTF-8
l3: LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=C;LC_MESSAGES=C;LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C
l4: *

[edit] See also

(destructor)
destructs the locale and the facets whose reference count becomes zero
(public member function)