< cpp‎ | locale
Localizations library
Locales and facets
Facet category base classes
ctype facets
numeric facets
collate facets
time facets
monetary facets
messages facets
Character classification and conversion
Character classification
Code conversion facets
C locale
Text encoding identifications
Defined in header <locale>
template< class CharT >
class numpunct;

The facet std::numpunct encapsulates numeric punctuation preferences. Stream I/O operations use std::numpunct through std::num_get and std::num_put for parsing numeric input and formatting numeric output.

The numbers that are supported by std::numpunct have the format described below. Here digit represents the radix set specified by the fmtflags argument value, thousands-sep and decimal-point are the results of thousands_sep() and decimal_point() functions respectively. The format of integer values is as follows:

integer     ::= [sign] units
sign        ::= plusminus
plusminus   ::= '+' | '-'
units       ::= digits [thousands-sep units]
digits      ::= digit [digits]

The number of digits between the thousand-seps (maximum size of digits) is specified by the result of grouping().

The format of floating-point values is as follows:

floatval    ::= [sign] units [decimal-point [digits]] [e [sign] digits] |
                [sign]        decimal-point  digits   [e [sign] digits]
e           ::= 'e' | 'E'

Inheritance diagram


[edit] Specializations

The standard library is guaranteed to provide the following specializations (they are required to be implemented by any locale object):

Defined in header <locale>
std::numpunct<char> provides equivalents of the "C" locale preferences
std::numpunct<wchar_t> provides wide character equivalents of the "C" locale preferences

[edit] Member types

Member type Definition
char_type CharT
string_type std::basic_string<CharT>

[edit] Member functions

constructs a new numpunct facet
(public member function) [edit]
destructs a numpunct facet
(protected member function) [edit]
invokes do_decimal_point
(public member function) [edit]
invokes do_thousands_sep
(public member function) [edit]
invokes do_grouping
(public member function) [edit]
invokes do_truename or do_falsename
(public member function) [edit]

[edit] Protected member functions

provides the character to use as decimal point
(virtual protected member function) [edit]
provides the character to use as thousands separator
(virtual protected member function) [edit]
provides the numbers of digits between each pair of thousands separators
(virtual protected member function) [edit]
provides the string to use as the name of the boolean true and false
(virtual protected member function) [edit]

[edit] Member objects

static std::locale::id id
id of the locale
(public member object)

[edit] Example

The following example changes the string representations of true and false:

#include <iostream>
#include <locale>
struct french_bool : std::numpunct<char>
    string_type do_truename() const override { return "vrai"; }
    string_type do_falsename() const override { return "faux"; }
int main()
    std::cout << "default locale: "
              << std::boolalpha << true << ", " << false << '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new french_bool));
    std::cout << "locale with modified numpunct: "
              << std::boolalpha << true << ", " << false << '\n';


default locale: true, false
locale with modified numpunct: vrai, faux

[edit] Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 338 C++98 the sign token allowed an optional whitespace following + or - removed the whitespace

[edit] See also

creates a numpunct facet for the named locale
(class template)