using category = int;
| Category | Includes facets | |
| collate | collate<char>, collate<wchar_t> | |
| ctype | ctype<char>, ctype<wchar_t> | |
| codecvt<char, char, mbstate_t> | ||
| codecvt<char16_t, char8_t, mbstate_t> | ||
| codecvt<char32_t, char8_t, mbstate_t> | ||
| codecvt<wchar_t, char, mbstate_t> | ||
| monetary | moneypunct<char>, moneypunct<wchar_t> | |
| moneypunct<char, true>, moneypunct<wchar_t, true> | ||
| money_get<char>, money_get<wchar_t> | ||
| money_put<char>, money_put<wchar_t> | ||
| numeric | numpunct<char>, numpunct<wchar_t> | |
| num_get<char>, num_get<wchar_t> | ||
| num_put<char>, num_put<wchar_t> | ||
| time | time_get<char>, time_get<wchar_t> | |
| time_put<char>, time_put<wchar_t> | ||
| messages | messages<char>, messages<wchar_t> | 
| Category | Includes facets | |
| collate | collate_byname<char>, collate_byname<wchar_t> | |
| ctype | ctype_byname<char>, ctype_byname<wchar_t> | |
| codecvt_byname<char, char, mbstate_t> | ||
| codecvt_byname<char16_t, char8_t, mbstate_t> | ||
| codecvt_byname<char32_t, char8_t, mbstate_t> | ||
| codecvt_byname<wchar_t, char, mbstate_t> | ||
| monetary | moneypunct_byname<char, International> | |
| moneypunct_byname<wchar_t, International> | ||
| money_get<C, InputIterator> | ||
| money_put<C, OutputIterator> | ||
| numeric | numpunct_byname<char>, numpunct_byname<wchar_t> | |
| num_get<C, InputIterator>, num_put<C, OutputIterator> | ||
| time | time_get<char, InputIterator> | |
| time_get_byname<char, InputIterator> | ||
| time_get<wchar_t, InputIterator> | ||
| time_get_byname<wchar_t, InputIterator> | ||
| time_put<char, OutputIterator> | ||
| time_put_byname<char, OutputIterator> | ||
| time_put<wchar_t, OutputIterator> | ||
| time_put_byname<wchar_t, OutputIterator> | ||
| messages | messages_byname<char>, messages_byname<wchar_t> | 
locale() noexcept;
explicit locale(const char* std_name);
explicit locale(const string& std_name);
locale(const locale& other, const char* std_name, category cats);
locale(const locale& other, const string& std_name, category cats);
template<class Facet> locale(const locale& other, Facet* f);
locale(const locale& other, const locale& one, category cats);
const locale& operator=(const locale& other) noexcept;
template<class Facet> locale combine(const locale& other) const;
string name() const;
text_encoding encoding() const;
bool operator==(const locale& other) const;
template<class charT, class traits, class Allocator>
  bool operator()(const basic_string<charT, traits, Allocator>& s1,
                  const basic_string<charT, traits, Allocator>& s2) const;
static locale global(const locale& loc);
static const locale& classic();