std::use_facet

Header: <locale>

Obtains a reference to a facet implemented by loc.

# Declarations

template< class Facet >
const Facet& use_facet( const std::locale& loc );

# Parameters

# Return value

Returns a reference to the facet. The reference returned by this function is valid as long as any std::locale object refers to that facet.

# Notes

A std::locale object should not be a temporary if a reference to the Facet object obtained from use_facet is used after the end of statement:

# Example

#include <iostream>
#include <locale>
 
int main()
{
    for (const char* name: {"en_US.UTF-8", "de_DE.UTF-8", "en_GB.UTF-8"})
        std::cout << "Your currency string is "
                  << std::use_facet<std::moneypunct<char, true>>(std::locale{name}).
                     curr_symbol() << '\n';
}

# Defect reports

DRApplied toBehavior as publishedCorrect behavior
LWG 31C++98the returned reference remained usableas long as the locale value itself existsthe returned reference remains usable aslong as some locale object refers to that facet
LWG 38C++98Facet was not required to have a direct member idrequired
LWG 436C++98it was unclear whether Facet can be cv-qualifiedit can be const-qualified, but not volatile-qualified

# See also