Boost.Locale provides to_utf, from_utf and utf_to_utf functions in the boost::locale::conv namespace. They are simple and convenient functions to convert a string to and from UTF-8/16/32 strings and strings using other encodings.
Boost.Locale provides to_utf, from_utf and utf_to_utf functions in the boost::locale::conv namespace. They are simple and convenient functions to convert a string to and from UTF-8/16/32 strings and strings using other encodings.
For example:
std::string utf8_string = to_utf<char>(latin1_string,"Latin1"); std::wstring wide_string = to_utf<wchar_t>(latin1_string,"Latin1"); -std::string latin1_string = from_utf(wide_string,"Latin1"); +std::string latin1_string = from_utf(wide_string,"Latin1"); std::string utf8_string2 = utf_to_utf<char>(wide_string);
This function may use an explicit encoding name like "Latin1" or "ISO-8859-8", or use std::locale as a parameter to fetch this information from it. It also receives a policy parameter that tells it how to behave if the conversion can't be performed (i.e. an illegal or unsupported character is found). By default this function skips all illegal characters and tries to do the best it can, however, it is possible ask it to throw a conversion_error exception by passing the stop flag to it:
std::wstring s=to_utf<wchar_t>("\xFF\xFF","UTF-8",stop); diff --git a/doc/html/classboost_1_1locale_1_1conv_1_1conversion__error.html b/doc/html/classboost_1_1locale_1_1conv_1_1conversion__error.html index 1947456..07e976a 100644 --- a/doc/html/classboost_1_1locale_1_1conv_1_1conversion__error.html +++ b/doc/html/classboost_1_1locale_1_1conv_1_1conversion__error.html @@ -68,7 +68,7 @@
The excepton that is thrown in case of conversion error. More...
-#include <boost/locale/encoding.hpp>
#include <boost/locale/encoding_errors.hpp>
+ Boost
+ C++ Libraries
+
+
+
+ ...one of the most highly
+ regarded and expertly designed C++ library projects in the
+ world.
+
+ — Herb Sutter and Andrei
+ Alexandrescu, C++
+ Coding Standards
+
+ Boost
+ C++ Libraries
+
+
+
+ ...one of the most highly
+ regarded and expertly designed C++ library projects in the
+ world.
+
+ — Herb Sutter and Andrei
+ Alexandrescu, C++
+ Coding Standards
+
+ Boost
+ C++ Libraries
+
+
+
+ ...one of the most highly
+ regarded and expertly designed C++ library projects in the
+ world.
+
+ — Herb Sutter and Andrei
+ Alexandrescu, C++
+ Coding Standards
+
| boost/locale/conversion.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| boost/locale/date_time.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| boost/locale/date_time_facet.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| boost/locale/definitions.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| boost/locale/encoding.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| boost/locale/encoding_errors.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| boost/locale/encoding_utf.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| boost/locale/format.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| boost/locale/formatting.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| boost/locale/generator.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| boost/locale/localization_backend.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| boost/locale/message.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| boost/locale/time_zone.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| boost/locale/utf.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| boost/locale/util.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| boost/locale/boundary/boundary_point.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| boost/locale/boundary/facets.hpp [code] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| std::string boost::locale::conv::between | -( | -char const * | -begin, | -|
| - | - | char const * | -end, | -|
| - | - | std::string const & | -to_encoding, | -|
| - | - | std::string const & | -from_encoding, | -|
| - | - | method_type | - how = default_method | - |
| - | ) | -- |
Convert a text in range [begin,end) to to_encoding from from_encoding
- -| std::string boost::locale::conv::between | -( | -char const * | -text, | -|
| - | - | std::string const & | -to_encoding, | -|
| - | - | std::string const & | -from_encoding, | -|
| - | - | method_type | - how = default_method | - |
| - | ) | - [inline] |
-
Convert a text to to_encoding from from_encoding
- -| std::string boost::locale::conv::between | -( | -std::string const & | -text, | -|
| - | - | std::string const & | -to_encoding, | -|
| - | - | std::string const & | -from_encoding, | -|
| - | - | method_type | - how = default_method | - |
| - | ) | - [inline] |
-
Convert a text to to_encoding from from_encoding
- -| std::string boost::locale::conv::from_utf | -( | -CharType const * | -begin, | -|
| - | - | CharType const * | -end, | -|
| - | - | std::locale const & | -loc, | -|
| - | - | method_type | - how = default_method | - |
| - | ) | -- |
convert UTF text in range [begin,end) to a text encoded according to locale loc according to policy how
-| std::string boost::locale::conv::from_utf | -( | -CharType const * | -text, | -|
| - | - | std::string const & | -charset, | -|
| - | - | method_type | - how = default_method | - |
| - | ) | -- |
Convert a text from UTF to charset
- -| std::string boost::locale::conv::from_utf | -( | -std::basic_string< CharType > const & | -text, | -|
| - | - | std::locale const & | -loc, | -|
| - | - | method_type | - how = default_method | - |
| - | ) | -- |
Convert a text in UTF to locale encoding given by loc
-| std::string boost::locale::conv::from_utf | -( | -std::basic_string< CharType > const & | -text, | -|
| - | - | std::string const & | -charset, | -|
| - | - | method_type | - how = default_method | - |
| - | ) | -- |
Convert a text from charset to UTF string
- -| std::string boost::locale::conv::from_utf | -( | -CharType const * | -text, | -|
| - | - | std::locale const & | -loc, | -|
| - | - | method_type | - how = default_method | - |
| - | ) | -- |
Convert a text in UTF to locale encoding given by loc
-| std::string boost::locale::conv::from_utf | -( | -CharType const * | -begin, | -|
| - | - | CharType const * | -end, | -|
| - | - | std::string const & | -charset, | -|
| - | - | method_type | - how = default_method | - |
| - | ) | -- |
convert UTF text in range [begin,end) to a text encoded with charset according to policy how
- -| std::basic_string<CharType> boost::locale::conv::to_utf | -( | -char const * | -text, | -|
| - | - | std::string const & | -charset, | -|
| - | - | method_type | - how = default_method | - |
| - | ) | -- |
Convert a text from charset to UTF string
- -| std::basic_string<CharType> boost::locale::conv::to_utf | -( | -char const * | -begin, | -|
| - | - | char const * | -end, | -|
| - | - | std::string const & | -charset, | -|
| - | - | method_type | - how = default_method | - |
| - | ) | -- |
convert string to UTF string from text in range [begin,end) encoded with charset according to policy how
- -| std::basic_string<CharType> boost::locale::conv::to_utf | -( | -std::string const & | -text, | -|
| - | - | std::locale const & | -loc, | -|
| - | - | method_type | - how = default_method | - |
| - | ) | -- |
Convert a text in locale encoding given by loc to UTF
-| std::basic_string<CharType> boost::locale::conv::to_utf | -( | -std::string const & | -text, | -|
| - | - | std::string const & | -charset, | -|
| - | - | method_type | - how = default_method | - |
| - | ) | -- |
convert a string text encoded with charset to UTF string
- -| std::basic_string<CharType> boost::locale::conv::to_utf | -( | -char const * | -begin, | -|
| - | - | char const * | -end, | -|
| - | - | std::locale const & | -loc, | -|
| - | - | method_type | - how = default_method | - |
| - | ) | -- |
convert string to UTF string from text in range [begin,end) encoded according to locale loc according to policy how
-| std::basic_string<CharType> boost::locale::conv::to_utf | -( | -char const * | -text, | -|
| - | - | std::locale const & | -loc, | -|
| - | - | method_type | - how = default_method | - |
| - | ) | -- |
Convert a text in locale encoding given by loc to UTF
-| std::basic_string<CharOut> boost::locale::conv::utf_to_utf | -( | -std::basic_string< CharIn > const & | -str, | -|
| - | - | method_type | - how = default_method | - |
| - | ) | -- |
Convert a Unicode string str other Unicode encoding
- -Convert a Unicode text in range [begin,end) to other Unicode encoding
+| std::basic_string<CharOut> boost::locale::conv::utf_to_utf | +( | +std::basic_string< CharIn > const & | +str, | +|
| + | + | method_type | + how = default_method | + |
| + | ) | ++ |
Convert a Unicode string str other Unicode encoding
+This namespae contains all operations required for boundary analysis of text.
Namespace that contains all functions related to character set conversion.
-This namespace holds additional formatting flags that can be set using ios_info.
@@ -123,6 +118,11 @@ Namespacesnamespace that holds functions for operating with global time zone
Namespace that holds basic operations on UTF encoded sequences.
+This namespace provides various utility function useful for Boost.Locale backends implementations.
diff --git a/doc/html/namespaceboost_1_1locale_1_1conv.html b/doc/html/namespaceboost_1_1locale_1_1conv.html deleted file mode 100644 index fc9a28d..0000000 --- a/doc/html/namespaceboost_1_1locale_1_1conv.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - -
- Boost
- C++ Libraries
-
-
-
- ...one of the most highly
- regarded and expertly designed C++ library projects in the
- world.
-
- — Herb Sutter and Andrei
- Alexandrescu, C++
- Coding Standards
-
Namespace that contains all functions related to character set conversion. -More...
--Classes | |
| class | conversion_error |
| The excepton that is thrown in case of conversion error. More... | |
| class | invalid_charset_error |
| This exception is thrown in case of use of unsupported or invalid character set. More... | |
-Enumerations | |
| enum | method_type { skip = 0, -stop = 1, -default_method = skip - } |
-Functions | |
| template<typename CharType > | |
| std::basic_string< CharType > | to_utf (char const *begin, char const *end, std::string const &charset, method_type how=default_method) |
| template<typename CharType > | |
| std::string | from_utf (CharType const *begin, CharType const *end, std::string const &charset, method_type how=default_method) |
| template<typename CharType > | |
| std::basic_string< CharType > | to_utf (char const *begin, char const *end, std::locale const &loc, method_type how=default_method) |
| template<typename CharType > | |
| std::string | from_utf (CharType const *begin, CharType const *end, std::locale const &loc, method_type how=default_method) |
| template<typename CharType > | |
| std::basic_string< CharType > | to_utf (std::string const &text, std::string const &charset, method_type how=default_method) |
| template<typename CharType > | |
| std::string | from_utf (std::basic_string< CharType > const &text, std::string const &charset, method_type how=default_method) |
| template<typename CharType > | |
| std::basic_string< CharType > | to_utf (char const *text, std::string const &charset, method_type how=default_method) |
| template<typename CharType > | |
| std::string | from_utf (CharType const *text, std::string const &charset, method_type how=default_method) |
| template<typename CharType > | |
| std::basic_string< CharType > | to_utf (std::string const &text, std::locale const &loc, method_type how=default_method) |
| template<typename CharType > | |
| std::string | from_utf (std::basic_string< CharType > const &text, std::locale const &loc, method_type how=default_method) |
| template<typename CharType > | |
| std::basic_string< CharType > | to_utf (char const *text, std::locale const &loc, method_type how=default_method) |
| template<typename CharType > | |
| std::string | from_utf (CharType const *text, std::locale const &loc, method_type how=default_method) |
| std::string | between (char const *begin, char const *end, std::string const &to_encoding, std::string const &from_encoding, method_type how=default_method) |
| std::string | between (char const *text, std::string const &to_encoding, std::string const &from_encoding, method_type how=default_method) |
| std::string | between (std::string const &text, std::string const &to_encoding, std::string const &from_encoding, method_type how=default_method) |
| template<typename CharOut , typename CharIn > | |
| std::basic_string< CharOut > | utf_to_utf (CharIn const *begin, CharIn const *end, method_type how=default_method) |
| template<typename CharOut , typename CharIn > | |
| std::basic_string< CharOut > | utf_to_utf (CharIn const *str, method_type how=default_method) |
| template<typename CharOut , typename CharIn > | |
| std::basic_string< CharOut > | utf_to_utf (std::basic_string< CharIn > const &str, method_type how=default_method) |
Namespace that contains all functions related to character set conversion.
-
+ Boost
+ C++ Libraries
+
+
+
+ ...one of the most highly
+ regarded and expertly designed C++ library projects in the
+ world.
+
+ — Herb Sutter and Andrei
+ Alexandrescu, C++
+ Coding Standards
+
Namespace that holds basic operations on UTF encoded sequences. +More...
++Classes | |
| struct | utf_traits |
| UTF Traits class - functions to convert UTF sequences to and from Unicode code points. More... | |
+Typedefs | |
| +typedef uint32_t | code_point |
| The integral type type that can hold a Unicode code point. | |
+Functions | |
| +bool | is_valid_codepoint (code_point v) |
| the function checks if v is a valid code point | |
+Variables | |
| +static const code_point | illegal = 0xFFFFFFFFu |
| Special constant that defines illegal code point. | |
| +static const code_point | incomplete = 0xFFFFFFFEu |
| Special constant that defines incomplete code point. | |
Namespace that holds basic operations on UTF encoded sequences.
+All functions defined in this namespace do not require linking with Boost.Locale library
+
- Boost
- C++ Libraries
-
-
-
- ...one of the most highly
- regarded and expertly designed C++ library projects in the
- world.
-
- — Herb Sutter and Andrei
- Alexandrescu, C++
- Coding Standards
-
| boost::locale | This is the main namespace that encloses all localization classes |
| boost::locale::as | This namespace includes all manipulators that can be used on IO streams |
| boost::locale::boundary | This namespae contains all operations required for boundary analysis of text |
| boost::locale::conv | Namespace that contains all functions related to character set conversion |
| boost::locale::flags | This namespace holds additional formatting flags that can be set using ios_info |
| boost::locale::gnu_gettext | This namespace holds classes that provide GNU Gettext message catalogs support |
| boost::locale::period | Namespace that contains various types for manipulation with dates |
| boost::locale::period::marks | This namespace holds a enum of various period types like era, year, month, etc. |
| boost::locale::time_zone | Namespace that holds functions for operating with global time zone |
| boost::locale::utf | Namespace that holds basic operations on UTF encoded sequences |
| boost::locale::util | This namespace provides various utility function useful for Boost.Locale backends implementations |
+ Boost
+ C++ Libraries
+
+
+
+ ...one of the most highly
+ regarded and expertly designed C++ library projects in the
+ world.
+
+ — Herb Sutter and Andrei
+ Alexandrescu, C++
+ Coding Standards
+
| char_type typedef | boost::locale::utf::utf_traits< CharType, size > | |
| decode(Iterator &p, Iterator e) | boost::locale::utf::utf_traits< CharType, size > | [static] |
| decode_valid(Iterator &p) | boost::locale::utf::utf_traits< CharType, size > | [static] |
| encode(code_point value, Iterator out) | boost::locale::utf::utf_traits< CharType, size > | [static] |
| is_lead(char_type c) | boost::locale::utf::utf_traits< CharType, size > | [static] |
| is_trail(char_type c) | boost::locale::utf::utf_traits< CharType, size > | [static] |
| max_width | boost::locale::utf::utf_traits< CharType, size > | [static] |
| trail_length(char_type c) | boost::locale::utf::utf_traits< CharType, size > | [static] |
| width(code_point value) | boost::locale::utf::utf_traits< CharType, size > | [static] |
+ Boost
+ C++ Libraries
+
+
+
+ ...one of the most highly
+ regarded and expertly designed C++ library projects in the
+ world.
+
+ — Herb Sutter and Andrei
+ Alexandrescu, C++
+ Coding Standards
+
UTF Traits class - functions to convert UTF sequences to and from Unicode code points. +More...
+ +#include <boost/locale/utf.hpp>
+Public Types | |
| typedef CharType | char_type |
+Static Public Member Functions | |
| template<typename Iterator > | |
| static code_point | decode (Iterator &p, Iterator e) |
| static int | width (code_point value) |
| static int | trail_length (char_type c) |
| static bool | is_trail (char_type c) |
| static bool | is_lead (char_type c) |
| template<typename Iterator > | |
| static Iterator | encode (code_point value, Iterator out) |
| template<typename Iterator > | |
| static code_point | decode_valid (Iterator &p) |
+Static Public Attributes | |
| static const int | max_width |
UTF Traits class - functions to convert UTF sequences to and from Unicode code points.
+| typedef CharType boost::locale::utf::utf_traits< CharType, size >::char_type | +
The type of the character
+ +| static code_point boost::locale::utf::utf_traits< CharType, size >::decode | +( | +Iterator & | +p, | +|
| + | + | Iterator | +e | + |
| + | ) | + [static] |
+
Read one code point from the range [p,e) and return it.
+Requirements
+Postconditions
+| static code_point boost::locale::utf::utf_traits< CharType, size >::decode_valid | +( | +Iterator & | +p | +) | + [static] |
+
Decodes valid UTF sequence that is pointed by p into code point.
+If the sequence is invalid or points to end the behavior is undefined
+ +| static Iterator boost::locale::utf::utf_traits< CharType, size >::encode | +( | +code_point | +value, | +|
| + | + | Iterator | +out | + |
| + | ) | + [static] |
+
Convert valid Unicode code point value to the UTF sequence.
+Requirements:
+Returns the iterator past the last written code unit.
+ +| static bool boost::locale::utf::utf_traits< CharType, size >::is_lead | +( | +char_type | +c | +) | + [static] |
+
Returns true if c is lead code unit, always true of UTF-32
+ +| static bool boost::locale::utf::utf_traits< CharType, size >::is_trail | +( | +char_type | +c | +) | + [static] |
+
Returns true if c is trail code unit, always false for UTF-32
+ +| static int boost::locale::utf::utf_traits< CharType, size >::trail_length | +( | +char_type | +c | +) | + [static] |
+
Get the size of the trail part of variable length encoded sequence.
+Returns -1 if C is not valid lead character
+ +| static int boost::locale::utf::utf_traits< CharType, size >::width | +( | +code_point | +value | +) | + [static] |
+
The width of specific code point in the code units.
+Requirement: value is a valid Unicode code point Returns value in range [1..max_width]
+ +const int boost::locale::utf::utf_traits< CharType, size >::max_width [static] |
+
Maximal width of valid sequence in the code units:
+![]()
![]()
Date, Time, Timezone and Calendar manipulations
![]()
![]()
Character conversion functions
![]()
![]()
Message Formatting (translation)
![]()
![]()
boost::locale::period::period_type
![]()
![]()
boost::locale::boundary::segment< IteratorType >
![]()
![]()
boost::locale::boundary::segment_index< BaseIterator >
![]()
![]()
boost::locale::period::period_type
![]()
![]()
boost::locale::boundary::segment< IteratorType >
![]()
![]()
boost::locale::boundary::segment_index< BaseIterator >
![]()
![]()
boost/locale/conversion.hpp
![]()
![]()
boost/locale/date_time.hpp
![]()
![]()
boost/locale/date_time_facet.hpp
![]()
![]()
boost/locale/definitions.hpp
![]()
![]()
boost/locale/encoding.hpp
![]()
![]()
boost/locale/encoding_errors.hpp
![]()
![]()
boost/locale/encoding_utf.hpp
![]()
![]()
boost/locale/format.hpp
![]()
![]()
boost/locale/formatting.hpp
![]()
![]()
boost/locale/generator.hpp
![]()
![]()
boost/locale/localization_backend.hpp
![]()
![]()
boost/locale/message.hpp
![]()
![]()
boost/locale/time_zone.hpp
![]()
![]()
boost/locale/utf.hpp
![]()
![]()
boost/locale/util.hpp
![]()
![]()
boost/locale/boundary/boundary_point.hpp
![]()
![]()
boost/locale/boundary/facets.hpp
+ Boost
+ C++ Libraries
+
+
+
+ ...one of the most highly
+ regarded and expertly designed C++ library projects in the
+ world.
+
+ — Herb Sutter and Andrei
+ Alexandrescu, C++
+ Coding Standards
+