Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r73852 - branches/release/libs/conversion/doc
From: antoshkka_at_[hidden]
Date: 2011-08-17 14:44:00


Author: apolukhin
Date: 2011-08-17 14:44:00 EDT (Wed, 17 Aug 2011)
New Revision: 73852
URL: http://svn.boost.org/trac/boost/changeset/73852

Log:
Merge from trunk r73850

* Documentation commited
Added:
   branches/release/libs/conversion/doc/Jamfile.v2 (contents, props changed)
   branches/release/libs/conversion/doc/lexical_cast.qbk (contents, props changed)

Added: branches/release/libs/conversion/doc/Jamfile.v2
==============================================================================
--- (empty file)
+++ branches/release/libs/conversion/doc/Jamfile.v2 2011-08-17 14:44:00 EDT (Wed, 17 Aug 2011)
@@ -0,0 +1,16 @@
+# Copyright Antony Polukhin 2011. Use, modification, and distribution are
+# subject to the Boost Software License, Version 1.0. (See accompanying
+# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+using quickbook ;
+import boostbook : boostbook ;
+
+xml lexical_cast : lexical_cast.qbk ;
+boostbook standalone
+ :
+ lexical_cast
+ :
+ <xsl:param>boost.root=../../../..
+ <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/doc/html
+ ;
+

Added: branches/release/libs/conversion/doc/lexical_cast.qbk
==============================================================================
--- (empty file)
+++ branches/release/libs/conversion/doc/lexical_cast.qbk 2011-08-17 14:44:00 EDT (Wed, 17 Aug 2011)
@@ -0,0 +1,699 @@
+[library Boost.Lexical_Cast
+ [quickbook 1.5]
+ [version 1.0]
+ [copyright 2000-2005 Kevlin Henney]
+ [copyright 2006-2010 Alexander Nasonov]
+ [copyright 2011 Antony Polukhin]
+ [category String and text processing]
+ [category Miscellaneous]
+ [license
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ [@http://www.boost.org/LICENSE_1_0.txt])
+ ]
+]
+
+[def __numericcast__ [@boost:libs/numeric/conversion/doc/html/boost_numericconversion/improved_numeric_cast__.html `boost::numeric_cast`]]
+[def __proposallong__ [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1973.html Lexical Conversion Library Proposal for TR2, N1973 by Kevlin Henney and Beman Dawes]]
+[def __proposalshort__ [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1973.html Lexical Conversion Library Proposal for TR2, N1973]]
+
+[section Motivation]
+Sometimes a value must be converted to a literal text form, such as an [c++] `int` represented as a `std::string`, or vice-versa, when a `std::string` is interpreted as an `int`. Such examples are common when converting between data types internal to a program and representation external to a program, such as windows and configuration files.
+
+The standard C and C++ libraries offer a number of facilities for performing such conversions. However, they vary with their ease of use, extensibility, and safety.
+
+For instance, there are a number of limitations with the family of standard C functions typified by `atoi`:
+
+* Conversion is supported in one direction only: from text to internal data type. Converting the other way using the C library requires either the inconvenience and compromised safety of the `sprintf` function, or the loss of portability associated with non-standard functions such as `itoa`.
+* The range of types supported is only a subset of the built-in numeric types, namely `int`, `long`, and `double`.
+* The range of types cannot be extended in a uniform manner. For instance, conversion from string representation to complex or rational.
+
+The standard C functions typified by `strtol` have the same basic limitations, but offer finer control over the conversion process. However, for the common case such control is often either not required or not used. The `scanf` family of functions offer even greater control, but also lack safety and ease of use.
+
+The standard C++ library offers `stringstream` for the kind of in-core formatting being discussed. It offers a great deal of control over the formatting and conversion of I/O to and from arbitrary types through text. However, for simple conversions direct use of `stringstream` can be either clumsy (with the introduction of extra local variables and the loss of infix-expression convenience) or obscure (where `stringstream` objects are created as temporary objects in an expression). Facets provide a comprehensive concept and facility for controlling textual representation, but their perceived complexity and high entry level requires an extreme degree of involvement for simple conversions, and excludes all but a few programmers.
+
+The `lexical_cast` function template offers a convenient and consistent form for supporting common conversions to and from arbitrary types when they are represented as text. The simplification it offers is in expression-level convenience for such conversions. For more involved conversions, such as where precision or formatting need tighter control than is offered by the default behavior of `lexical_cast`, the conventional `std::stringstream` approach is recommended. Where the conversions are numeric to numeric, __numericcast__ may offer more reasonable behavior than `lexical_cast`.
+
+For a good discussion of the options and issues involved in string-based formatting, including comparison of `stringstream`, `lexical_cast`, and others, see Herb Sutter's article, [@http://www.gotw.ca/publications/mill19.htm The String Formatters of Manor Farm]. Also, take a look at the [link boost_lexical_cast.performance Performance] section.
+[endsect]
+
+[section Examples]
+The following example treats command line arguments as a sequence of numeric data:
+``
+ int main(int argc, char * argv[])
+ {
+ using boost::lexical_cast;
+ using boost::bad_lexical_cast;
+
+ std::vector<short> args;
+
+ while(*++argv)
+ {
+ try
+ {
+ args.push_back(lexical_cast<short>(*argv));
+ }
+ catch(bad_lexical_cast &)
+ {
+ args.push_back(0);
+ }
+ }
+ ...
+ }
+``
+The following example uses numeric data in a string expression:
+``
+ void log_message(const std::string &);
+
+ void log_errno(int yoko)
+ {
+ log_message("Error " + boost::lexical_cast<std::string>(yoko) + ": " + strerror(yoko));
+ }
+``
+[endsect]
+
+[section Synopsis]
+Library features defined in [@boost:boost/lexical_cast.hpp boost/lexical_cast.hpp]:
+``
+ namespace boost
+ {
+ class bad_lexical_cast;
+ template<typename Target, typename Source>
+ Target lexical_cast(const Source& arg);
+ }
+``
+
+[section lexical_cast]
+``
+ template<typename Target, typename Source>
+ Target lexical_cast(const Source& arg);
+``
+Returns the result of streaming arg into a standard library string-based stream and then out as a Target object. Where Target is either `std::string` or `std::wstring`, stream extraction takes the whole content of the string, including spaces, rather than relying on the default `operator>>` behavior. If the conversion is unsuccessful, a `bad_lexical_cast` exception is thrown.
+
+The requirements on the argument and result types are:
+
+* Source is OutputStreamable, meaning that an `operator<<` is defined that takes a `std::ostream` or `std::wostream` object on the left hand side and an instance of the argument type on the right.
+* Target is InputStreamable, meaning that an `operator>>` is defined that takes a `std::istream` or `std::wistream` object on the left hand side and an instance of the result type on the right.
+* Target is CopyConstructible [20.1.3].
+* Target is DefaultConstructible, meaning that it is possible to default-initialize an object of that type [8.5, 20.1.4].
+
+The character type of the underlying stream is assumed to be char unless either the Source or the Target requires wide-character streaming, in which case the underlying stream uses `wchar_t`. Source types that require wide-character streaming are `wchar_t`, `wchar_t *`, and `std::wstring`. Target types that require wide-character streaming are `wchar_t` and `std::wstring`.
+
+Where a higher degree of control is required over conversions, `std::stringstream` and `std::wstringstream` offer a more appropriate path. Where non-stream-based conversions are required, `lexical_cast` is the wrong tool for the job and is not special-cased for such scenarios.
+[endsect]
+
+[section bad_lexical_cast]
+``
+ class bad_lexical_cast : public std::bad_cast
+ {
+ public:
+ ... // same member function interface as std::exception
+ };
+``
+Exception used to indicate runtime lexical_cast failure.
+[endsect]
+
+[endsect]
+
+[section Frequently Asked Questions]
+
+* [*Question:] Why does `lexical_cast<int8_t>("127")` throw `bad_lexical_cast`?
+ * [*Answer:] The type `int8_t` is a `typedef` to `char` or `signed char`. Lexical conversion to these types is simply reading a byte from source but since the source has more than one byte, the exception is thrown.
+Please use other integer types such as `int` or `short int`. If bounds checking is important, you can also
+call __numericcast__:
+`numeric_cast<int8_t>(lexical_cast<int>("127"));`
+
+[pre
+]
+
+* [*Question:] Why does `lexical_cast<unsigned char>("127")` throw `bad_lexical_cast`?
+ * [*Answer:] Lexical conversion to any char type is simply reading a byte from source. But since the source has more than one byte, the exception is thrown.
+Please use other integer types such as `int` or `short int`. If bounds checking is important, you can also
+call __numericcast__:
+`numeric_cast<unsigned char>(lexical_cast<int>("127"));`
+
+[pre
+]
+
+* [*Question:] What does `lexical_cast<std::string>` of an `int8_t` or `uint8_t` not do what I expect?
+ * [*Answer:] As above, note that int8_t and uint8_t are actually chars and are formatted as such. To avoid
+this, cast to an integer type first: `lexical_cast<std::string>(static_cast<int>(n));`
+
+[pre
+]
+
+* [*Question:] The implementation always resets the `ios_base::skipws` flag of an underlying stream object.
+It breaks my `operator>>` that works only in presence of this flag. Can you remove code that resets the flag?
+ * [*Answer:] May be in a future version. There is no requirement in
+__proposallong__ to reset the flag but
+remember that __proposalshort__ is not yet accepted by the committee. By the way, it's a great opportunity to
+make your `operator>>` conform to the standard.
+Read a good C++ book, study `std::sentry` and [@boost:libs/io/doc/ios_state.html `ios_state_saver`].
+
+[pre
+]
+
+* [*Question:] Why `std::cout << boost::lexical_cast<unsigned int>("-1");` does not throw, but outputs 4294967295?
+ * [*Answer:] `boost::lexical_cast` has the behavior of `std::stringstream`, which uses `num_get` functions of
+`std::locale` to convert numbers. If we look at the Programming languages — C++, we'll see, that `num_get` uses
+the rules of `scanf` for conversions. And in the C99 standard for unsigned input value minus sign is optional, so
+if a negative number is read, no errors will arise and the result will be the two's complement.
+
+[endsect]
+
+[section Changes]
+* [*boost 1.48.0 :]
+
+ * Added code to work with Inf and NaN on any platform.
+ * Better performance and less memory usage for conversions to float type (and to double type, if `sizeof(double) < sizeof(long double)`).
+
+* [*boost 1.47.0 :]
+
+ * Optimizations for "C" and other locales without number grouping.
+ * Better performance and less memory usage for unsigned char and signed char conversions.
+ * Better performance and less memory usage for conversions to arithmetic types.
+ * Better performance and less memory usage for conversions from arithmetic type to arithmetic type.
+ * Directly construct Target from Source on some conversions (like conversions from string to string, from char array to string, from char to char and others).
+
+* [*boost 1.34.0 :]
+
+ * Better performance for many combinations of Source and Target types. For more details refer to Alexander Nasonovs article [@http://accu.org/index.php/journals/1375 Fine Tuning for lexical_cast, Overload #74, August 2006] [@http://www.accu.org/var/uploads/journals/overload74.pdf (PDF)].
+
+* [*boost 1.33.0 :]
+
+ * Call-by-const reference for the parameters. This requires partial specialization of class templates, so it doesn't work for MSVC 6, and it uses the original pass by value there.
+ * The MSVC 6 support is deprecated, and will be removed in a future Boost version.
+
+* [*Earlier :]
+
+ * The previous version of lexical_cast used the default stream precision for reading and writing floating-point numbers. For numerics that have a corresponding specialization of `std::numeric_limits`, the current version now chooses a precision to match.
+ * The previous version of lexical_cast did not support conversion to or from any wide-character-based types. For compilers with full language and library support for wide characters, `lexical_cast` now supports conversions from `wchar_t`, `wchar_t *`, and `std::wstring` and to `wchar_t` and `std::wstring`.
+ * The previous version of `lexical_cast` assumed that the conventional stream extractor operators were sufficient for reading values. However, string I/O is asymmetric, with the result that spaces play the role of I/O separators rather than string content. The current version fixes this error for `std::string` and, where supported, `std::wstring`: `lexical_cast<std::string>("Hello, World")` succeeds instead of failing with a `bad_lexical_cast` exception.
+ * The previous version of `lexical_cast` allowed unsafe and meaningless conversions to pointers. The current version now throws a `bad_lexical_cast` for conversions to pointers: `lexical_cast<char *>("Goodbye, World")` now throws an exception instead of causing undefined behavior.
+
+[endsect]
+
+[section Performance]
+
+In most cases `boost::lexical_cast` is faster than `scanf`, `printf`, `std::stringstream`. For more detailed info you can look at the tables below.
+
+[section Tests description]
+All the tests measure execution speed in milliseconds for 10000 iterations of the following code blocks:
+[table:legend Tests source code
+[[Test name] [Code]]
+[[lexical_cast]
+ [``
+ _out = boost::lexical_cast<OUTTYPE>(_in);
+ ``]
+ ]
+[[std::stringstream with construction]
+ [``
+ std::stringstream ss;
+ ss << _in;
+ if (ss.fail()) throw std::logic_error(descr);
+ ss >> _out;
+ if (ss.fail()) throw std::logic_error(descr);
+ ``]
+ ]
+[[std::stringstream without construction]
+ [``
+ ss << _in; // ss is an instance of std::stringstream
+ if (ss.fail()) throw std::logic_error(descr);
+ ss >> _out;
+ if (ss.fail()) throw std::logic_error(descr);
+ /* reseting std::stringstream to use it again */
+ ss.str(std::string());
+ ss.clear();
+ ``]
+ ]
+[[scanf/printf]
+ [``
+ typename OUTTYPE::value_type buffer[500];
+ sprintf( (char*)buffer, conv, _in);
+ _out = buffer;
+ ``]
+ ]
+]
+Fastest results are highlitened with "!!! *x* !!!".
+Do not use this results to compare compilers, because tests were taken on different hardware.
+
+[endsect]
+
+[/ BEGIN of section, generated by performance measuring program ]
+
+[section clang-linux-2.8][table:id Performance Table (clang-linux-2.8)
+[[From->To] [lexical_cast] [std::stringstream with construction] [std::stringstream without construction][scanf/printf]]
+[[ string->char ][ !!! *<1* !!! ][ 106 ][ 11 ][ 11 ]]
+[[ string->signed char ][ !!! *<1* !!! ][ 102 ][ 8 ][ 8 ]]
+[[ string->unsigned char ][ !!! *<1* !!! ][ 83 ][ 7 ][ 15 ]]
+[[ string->int ][ !!! *8* !!! ][ 114 ][ 21 ][ 17 ]]
+[[ string->short ][ !!! *10* !!! ][ 111 ][ 20 ][ 17 ]]
+[[ string->long int ][ !!! *9* !!! ][ 113 ][ 20 ][ 16 ]]
+[[ string->long long ][ !!! *9* !!! ][ 112 ][ 21 ][ 16 ]]
+[[ string->unsigned int ][ !!! *9* !!! ][ 115 ][ 23 ][ 17 ]]
+[[ string->unsigned short ][ !!! *7* !!! ][ 111 ][ 21 ][ 16 ]]
+[[ string->unsigned long int ][ !!! *9* !!! ][ 106 ][ 20 ][ 17 ]]
+[[ string->unsigned long long ][ !!! *9* !!! ][ 104 ][ 21 ][ 17 ]]
+[[ string->bool ][ !!! *<1* !!! ][ 101 ][ 17 ][ 10 ]]
+[[ string->float ][ !!! *16* !!! ][ 175 ][ 67 ][ 33 ]]
+[[ string->double ][ !!! *18* !!! ][ 196 ][ 91 ][ 56 ]]
+[[ string->long double ][ 126 ][ 198 ][ 92 ][ !!! *61* !!! ]]
+[[ char->string ][ !!! *12* !!! ][ 101 ][ 16 ][ 12 ]]
+[[ unsigned char->string ][ !!! *10* !!! ][ 103 ][ 18 ][ 17 ]]
+[[ signed char->string ][ !!! *12* !!! ][ 101 ][ 18 ][ 12 ]]
+[[ int->string ][ !!! *19* !!! ][ 124 ][ 25 ][ 19 ]]
+[[ short->string ][ 23 ][ 124 ][ 26 ][ !!! *17* !!! ]]
+[[ long int->string ][ 20 ][ 123 ][ 23 ][ !!! *17* !!! ]]
+[[ long long->string ][ 19 ][ 124 ][ 23 ][ !!! *18* !!! ]]
+[[ unsigned int->string ][ 18 ][ 122 ][ 28 ][ !!! *17* !!! ]]
+[[ unsigned short->string ][ 36 ][ 160 ][ 31 ][ !!! *17* !!! ]]
+[[ unsigned long int->string ][ 22 ][ 123 ][ 28 ][ !!! *18* !!! ]]
+[[ unsigned long long->string ][ !!! *23* !!! ][ 137 ][ 32 ][ 23 ]]
+[[ bool->string ][ !!! *11* !!! ][ 124 ][ 26 ][ 17 ]]
+[[ float->string ][ 178 ][ 273 ][ 124 ][ !!! *57* !!! ]]
+[[ double->string ][ 227 ][ 450 ][ 241 ][ !!! *77* !!! ]]
+[[ long double->string ][ 249 ][ 331 ][ 185 ][ !!! *85* !!! ]]
+[[ char*->char ][ !!! *<1* !!! ][ 109 ][ 9 ][ 11 ]]
+[[ char*->signed char ][ !!! *<1* !!! ][ 105 ][ 15 ][ 8 ]]
+[[ char*->unsigned char ][ !!! *<1* !!! ][ 111 ][ 11 ][ 20 ]]
+[[ char*->int ][ !!! *7* !!! ][ 143 ][ 25 ][ 19 ]]
+[[ char*->short ][ !!! *10* !!! ][ 131 ][ 24 ][ 18 ]]
+[[ char*->long int ][ !!! *12* !!! ][ 134 ][ 24 ][ 18 ]]
+[[ char*->long long ][ !!! *12* !!! ][ 132 ][ 26 ][ 17 ]]
+[[ char*->unsigned int ][ !!! *10* !!! ][ 133 ][ 26 ][ 19 ]]
+[[ char*->unsigned short ][ !!! *11* !!! ][ 127 ][ 24 ][ 20 ]]
+[[ char*->unsigned long int ][ !!! *10* !!! ][ 143 ][ 26 ][ 19 ]]
+[[ char*->unsigned long long ][ !!! *12* !!! ][ 137 ][ 26 ][ 19 ]]
+[[ char*->bool ][ !!! *2* !!! ][ 138 ][ 27 ][ 13 ]]
+[[ char*->float ][ !!! *19* !!! ][ 186 ][ 65 ][ 31 ]]
+[[ char*->double ][ !!! *19* !!! ][ 195 ][ 96 ][ 57 ]]
+[[ char*->long double ][ 134 ][ 200 ][ 92 ][ !!! *61* !!! ]]
+[[ unsigned char*->char ][ !!! *<1* !!! ][ 87 ][ 8 ][ 10 ]]
+[[ unsigned char*->signed char ][ !!! *<1* !!! ][ 87 ][ 8 ][ 10 ]]
+[[ unsigned char*->unsigned char ][ !!! *<1* !!! ][ 89 ][ 8 ][ 16 ]]
+[[ unsigned char*->int ][ !!! *10* !!! ][ 117 ][ 22 ][ 17 ]]
+[[ unsigned char*->short ][ !!! *11* !!! ][ 117 ][ 21 ][ 17 ]]
+[[ unsigned char*->long int ][ !!! *10* !!! ][ 116 ][ 22 ][ 17 ]]
+[[ unsigned char*->long long ][ !!! *9* !!! ][ 116 ][ 22 ][ 17 ]]
+[[ unsigned char*->unsigned int ][ !!! *10* !!! ][ 117 ][ 24 ][ 17 ]]
+[[ unsigned char*->unsigned short ][ !!! *11* !!! ][ 119 ][ 22 ][ 17 ]]
+[[ unsigned char*->unsigned long int ][ !!! *10* !!! ][ 111 ][ 21 ][ 17 ]]
+[[ unsigned char*->unsigned long long ][ !!! *10* !!! ][ 109 ][ 21 ][ 17 ]]
+[[ unsigned char*->bool ][ !!! *<1* !!! ][ 105 ][ 18 ][ 10 ]]
+[[ unsigned char*->float ][ !!! *17* !!! ][ 174 ][ 66 ][ 33 ]]
+[[ unsigned char*->double ][ !!! *19* !!! ][ 198 ][ 91 ][ 56 ]]
+[[ unsigned char*->long double ][ 129 ][ 200 ][ 92 ][ !!! *58* !!! ]]
+[[ unsigned char*->string ][ !!! *12* !!! ][ 122 ][ 20 ][ --- ]]
+[[ signed char*->char ][ !!! *<1* !!! ][ 87 ][ 8 ][ 9 ]]
+[[ signed char*->signed char ][ !!! *<1* !!! ][ 86 ][ 8 ][ 10 ]]
+[[ signed char*->unsigned char ][ !!! *<1* !!! ][ 93 ][ 8 ][ 16 ]]
+[[ signed char*->int ][ !!! *10* !!! ][ 117 ][ 21 ][ 17 ]]
+[[ signed char*->short ][ !!! *11* !!! ][ 117 ][ 22 ][ 17 ]]
+[[ signed char*->long int ][ !!! *10* !!! ][ 115 ][ 21 ][ 17 ]]
+[[ signed char*->long long ][ !!! *10* !!! ][ 115 ][ 24 ][ 17 ]]
+[[ signed char*->unsigned int ][ !!! *10* !!! ][ 118 ][ 24 ][ 17 ]]
+[[ signed char*->unsigned short ][ !!! *11* !!! ][ 139 ][ 27 ][ 20 ]]
+[[ signed char*->unsigned long int ][ !!! *9* !!! ][ 144 ][ 27 ][ 19 ]]
+[[ signed char*->unsigned long long ][ !!! *7* !!! ][ 127 ][ 25 ][ 22 ]]
+[[ signed char*->bool ][ !!! *<1* !!! ][ 123 ][ 23 ][ 9 ]]
+[[ signed char*->float ][ !!! *21* !!! ][ 207 ][ 80 ][ 41 ]]
+[[ signed char*->double ][ !!! *23* !!! ][ 255 ][ 115 ][ 68 ]]
+[[ signed char*->long double ][ 159 ][ 275 ][ 125 ][ !!! *72* !!! ]]
+[[ signed char*->string ][ !!! *16* !!! ][ 155 ][ 27 ][ --- ]]
+[[ int->int ][ !!! *<1* !!! ][ 150 ][ 32 ][ --- ]]
+[[ float->double ][ !!! *<1* !!! ][ 304 ][ 162 ][ --- ]]
+[[ double->double ][ !!! *<1* !!! ][ 298 ][ 168 ][ --- ]]
+[[ int->int ][ !!! *<1* !!! ][ 311 ][ 154 ][ --- ]]
+[[ int->int ][ !!! *<1* !!! ][ 308 ][ 154 ][ --- ]]
+[[ char->unsigned char ][ !!! *<1* !!! ][ 97 ][ 9 ][ --- ]]
+[[ char->signed char ][ !!! *<1* !!! ][ 94 ][ 11 ][ --- ]]
+[[ unsigned char->char ][ !!! *<1* !!! ][ 106 ][ 8 ][ --- ]]
+[[ signed char->char ][ !!! *<1* !!! ][ 111 ][ 8 ][ --- ]]
+]
+[endsect]
+[section gcc-4.3][table:id Performance Table (gcc-4.3)
+[[From->To] [lexical_cast] [std::stringstream with construction] [std::stringstream without construction][scanf/printf]]
+[[ string->char ][ !!! *<1* !!! ][ 92 ][ 7 ][ 8 ]]
+[[ string->signed char ][ !!! *<1* !!! ][ 92 ][ 7 ][ 8 ]]
+[[ string->unsigned char ][ !!! *<1* !!! ][ 92 ][ 7 ][ 13 ]]
+[[ string->int ][ !!! *6* !!! ][ 115 ][ 21 ][ 14 ]]
+[[ string->short ][ !!! *7* !!! ][ 141 ][ 26 ][ 24 ]]
+[[ string->long int ][ !!! *7* !!! ][ 141 ][ 27 ][ 18 ]]
+[[ string->long long ][ !!! *7* !!! ][ 153 ][ 28 ][ 17 ]]
+[[ string->unsigned int ][ !!! *7* !!! ][ 156 ][ 26 ][ 18 ]]
+[[ string->unsigned short ][ !!! *8* !!! ][ 146 ][ 25 ][ 18 ]]
+[[ string->unsigned long int ][ !!! *9* !!! ][ 143 ][ 29 ][ 37 ]]
+[[ string->unsigned long long ][ !!! *14* !!! ][ 135 ][ 20 ][ 15 ]]
+[[ string->bool ][ !!! *<1* !!! ][ 117 ][ 20 ][ 8 ]]
+[[ string->float ][ !!! *15* !!! ][ 177 ][ 63 ][ 31 ]]
+[[ string->double ][ !!! *15* !!! ][ 198 ][ 89 ][ 54 ]]
+[[ string->long double ][ 133 ][ 198 ][ 88 ][ !!! *55* !!! ]]
+[[ char->string ][ !!! *10* !!! ][ 108 ][ 16 ][ 12 ]]
+[[ unsigned char->string ][ !!! *10* !!! ][ 119 ][ 18 ][ 15 ]]
+[[ signed char->string ][ !!! *10* !!! ][ 111 ][ 24 ][ 11 ]]
+[[ int->string ][ !!! *14* !!! ][ 129 ][ 22 ][ 15 ]]
+[[ short->string ][ !!! *14* !!! ][ 128 ][ 22 ][ 17 ]]
+[[ long int->string ][ !!! *14* !!! ][ 127 ][ 21 ][ 17 ]]
+[[ long long->string ][ !!! *14* !!! ][ 127 ][ 22 ][ 18 ]]
+[[ unsigned int->string ][ !!! *15* !!! ][ 124 ][ 22 ][ 17 ]]
+[[ unsigned short->string ][ 16 ][ 125 ][ 22 ][ !!! *15* !!! ]]
+[[ unsigned long int->string ][ !!! *15* !!! ][ 125 ][ 22 ][ 17 ]]
+[[ unsigned long long->string ][ !!! *18* !!! ][ 138 ][ 34 ][ 23 ]]
+[[ bool->string ][ !!! *7* !!! ][ 120 ][ 22 ][ 12 ]]
+[[ float->string ][ 136 ][ 229 ][ 110 ][ !!! *48* !!! ]]
+[[ double->string ][ 184 ][ 270 ][ 136 ][ !!! *67* !!! ]]
+[[ long double->string ][ 198 ][ 264 ][ 148 ][ !!! *69* !!! ]]
+[[ char*->char ][ !!! *<1* !!! ][ 98 ][ 8 ][ 8 ]]
+[[ char*->signed char ][ !!! *<1* !!! ][ 99 ][ 8 ][ 8 ]]
+[[ char*->unsigned char ][ !!! *<1* !!! ][ 96 ][ 8 ][ 14 ]]
+[[ char*->int ][ !!! *8* !!! ][ 120 ][ 21 ][ 15 ]]
+[[ char*->short ][ !!! *8* !!! ][ 122 ][ 22 ][ 16 ]]
+[[ char*->long int ][ !!! *8* !!! ][ 122 ][ 24 ][ 16 ]]
+[[ char*->long long ][ !!! *8* !!! ][ 120 ][ 23 ][ 14 ]]
+[[ char*->unsigned int ][ !!! *7* !!! ][ 123 ][ 23 ][ 15 ]]
+[[ char*->unsigned short ][ !!! *8* !!! ][ 123 ][ 24 ][ 15 ]]
+[[ char*->unsigned long int ][ !!! *8* !!! ][ 121 ][ 22 ][ 14 ]]
+[[ char*->unsigned long long ][ !!! *7* !!! ][ 116 ][ 20 ][ 16 ]]
+[[ char*->bool ][ !!! *<1* !!! ][ 107 ][ 18 ][ 10 ]]
+[[ char*->float ][ !!! *14* !!! ][ 181 ][ 67 ][ 32 ]]
+[[ char*->double ][ !!! *16* !!! ][ 197 ][ 88 ][ 53 ]]
+[[ char*->long double ][ 127 ][ 208 ][ 93 ][ !!! *56* !!! ]]
+[[ unsigned char*->char ][ !!! *<1* !!! ][ 94 ][ 8 ][ 8 ]]
+[[ unsigned char*->signed char ][ !!! *<1* !!! ][ 93 ][ 8 ][ 10 ]]
+[[ unsigned char*->unsigned char ][ !!! *<1* !!! ][ 94 ][ 8 ][ 15 ]]
+[[ unsigned char*->int ][ !!! *7* !!! ][ 117 ][ 21 ][ 16 ]]
+[[ unsigned char*->short ][ !!! *8* !!! ][ 119 ][ 21 ][ 16 ]]
+[[ unsigned char*->long int ][ !!! *7* !!! ][ 117 ][ 22 ][ 16 ]]
+[[ unsigned char*->long long ][ !!! *8* !!! ][ 119 ][ 23 ][ 16 ]]
+[[ unsigned char*->unsigned int ][ !!! *10* !!! ][ 123 ][ 20 ][ 15 ]]
+[[ unsigned char*->unsigned short ][ !!! *8* !!! ][ 122 ][ 24 ][ 15 ]]
+[[ unsigned char*->unsigned long int ][ !!! *8* !!! ][ 120 ][ 21 ][ 14 ]]
+[[ unsigned char*->unsigned long long ][ !!! *8* !!! ][ 118 ][ 23 ][ 16 ]]
+[[ unsigned char*->bool ][ !!! *1* !!! ][ 108 ][ 18 ][ 8 ]]
+[[ unsigned char*->float ][ !!! *13* !!! ][ 182 ][ 63 ][ 30 ]]
+[[ unsigned char*->double ][ !!! *16* !!! ][ 204 ][ 87 ][ 53 ]]
+[[ unsigned char*->long double ][ 126 ][ 206 ][ 90 ][ !!! *60* !!! ]]
+[[ unsigned char*->string ][ !!! *9* !!! ][ 123 ][ 21 ][ --- ]]
+[[ signed char*->char ][ !!! *<1* !!! ][ 95 ][ 8 ][ 10 ]]
+[[ signed char*->signed char ][ !!! *<1* !!! ][ 94 ][ 8 ][ 10 ]]
+[[ signed char*->unsigned char ][ !!! *<1* !!! ][ 94 ][ 8 ][ 15 ]]
+[[ signed char*->int ][ !!! *8* !!! ][ 117 ][ 22 ][ 16 ]]
+[[ signed char*->short ][ !!! *7* !!! ][ 117 ][ 22 ][ 16 ]]
+[[ signed char*->long int ][ !!! *8* !!! ][ 118 ][ 25 ][ 15 ]]
+[[ signed char*->long long ][ !!! *7* !!! ][ 117 ][ 24 ][ 16 ]]
+[[ signed char*->unsigned int ][ !!! *7* !!! ][ 120 ][ 20 ][ 16 ]]
+[[ signed char*->unsigned short ][ !!! *8* !!! ][ 124 ][ 24 ][ 15 ]]
+[[ signed char*->unsigned long int ][ !!! *8* !!! ][ 115 ][ 21 ][ 16 ]]
+[[ signed char*->unsigned long long ][ !!! *9* !!! ][ 120 ][ 21 ][ 16 ]]
+[[ signed char*->bool ][ !!! *1* !!! ][ 112 ][ 19 ][ 8 ]]
+[[ signed char*->float ][ !!! *14* !!! ][ 183 ][ 64 ][ 31 ]]
+[[ signed char*->double ][ !!! *18* !!! ][ 208 ][ 87 ][ 51 ]]
+[[ signed char*->long double ][ 126 ][ 217 ][ 94 ][ !!! *55* !!! ]]
+[[ signed char*->string ][ !!! *12* !!! ][ 126 ][ 22 ][ --- ]]
+[[ int->int ][ !!! *<1* !!! ][ 146 ][ 23 ][ --- ]]
+[[ float->double ][ !!! *<1* !!! ][ 275 ][ 139 ][ --- ]]
+[[ double->double ][ !!! *<1* !!! ][ 270 ][ 142 ][ --- ]]
+[[ int->int ][ !!! *<1* !!! ][ 281 ][ 145 ][ --- ]]
+[[ int->int ][ !!! *<1* !!! ][ 301 ][ 145 ][ --- ]]
+[[ char->unsigned char ][ !!! *<1* !!! ][ 96 ][ 7 ][ --- ]]
+[[ char->signed char ][ !!! *<1* !!! ][ 95 ][ 7 ][ --- ]]
+[[ unsigned char->char ][ !!! *<1* !!! ][ 96 ][ 7 ][ --- ]]
+[[ signed char->char ][ !!! *<1* !!! ][ 91 ][ 7 ][ --- ]]
+]
+[endsect]
+[section gcc-4.4][table:id Performance Table (gcc-4.4)
+[[From->To] [lexical_cast] [std::stringstream with construction] [std::stringstream without construction][scanf/printf]]
+[[ string->char ][ !!! *<1* !!! ][ 81 ][ 8 ][ 8 ]]
+[[ string->signed char ][ !!! *<1* !!! ][ 110 ][ 7 ][ 9 ]]
+[[ string->unsigned char ][ !!! *<1* !!! ][ 94 ][ 8 ][ 18 ]]
+[[ string->int ][ !!! *9* !!! ][ 125 ][ 25 ][ 15 ]]
+[[ string->short ][ !!! *7* !!! ][ 113 ][ 25 ][ 15 ]]
+[[ string->long int ][ !!! *8* !!! ][ 112 ][ 24 ][ 15 ]]
+[[ string->long long ][ !!! *8* !!! ][ 109 ][ 22 ][ 15 ]]
+[[ string->unsigned int ][ !!! *8* !!! ][ 108 ][ 26 ][ 20 ]]
+[[ string->unsigned short ][ !!! *9* !!! ][ 125 ][ 22 ][ 18 ]]
+[[ string->unsigned long int ][ !!! *11* !!! ][ 125 ][ 32 ][ 17 ]]
+[[ string->unsigned long long ][ !!! *10* !!! ][ 119 ][ 23 ][ 19 ]]
+[[ string->bool ][ !!! *<1* !!! ][ 132 ][ 24 ][ 11 ]]
+[[ string->float ][ !!! *18* !!! ][ 178 ][ 75 ][ 37 ]]
+[[ string->double ][ !!! *24* !!! ][ 236 ][ 100 ][ 64 ]]
+[[ string->long double ][ 146 ][ 233 ][ 118 ][ !!! *75* !!! ]]
+[[ char->string ][ !!! *8* !!! ][ 136 ][ 22 ][ 13 ]]
+[[ unsigned char->string ][ !!! *11* !!! ][ 127 ][ 22 ][ 20 ]]
+[[ signed char->string ][ !!! *11* !!! ][ 128 ][ 21 ][ 15 ]]
+[[ int->string ][ 25 ][ 159 ][ 30 ][ !!! *20* !!! ]]
+[[ short->string ][ 25 ][ 151 ][ 30 ][ !!! *20* !!! ]]
+[[ long int->string ][ !!! *20* !!! ][ 150 ][ 30 ][ 20 ]]
+[[ long long->string ][ !!! *19* !!! ][ 164 ][ 26 ][ 21 ]]
+[[ unsigned int->string ][ 35 ][ 147 ][ 27 ][ !!! *20* !!! ]]
+[[ unsigned short->string ][ 26 ][ 149 ][ 26 ][ !!! *20* !!! ]]
+[[ unsigned long int->string ][ 19 ][ 142 ][ 38 ][ !!! *17* !!! ]]
+[[ unsigned long long->string ][ !!! *20* !!! ][ 139 ][ 36 ][ 26 ]]
+[[ bool->string ][ !!! *10* !!! ][ 144 ][ 28 ][ 13 ]]
+[[ float->string ][ 166 ][ 268 ][ 127 ][ !!! *52* !!! ]]
+[[ double->string ][ 192 ][ 285 ][ 170 ][ !!! *90* !!! ]]
+[[ long double->string ][ 250 ][ 344 ][ 160 ][ !!! *85* !!! ]]
+[[ char*->char ][ !!! *<1* !!! ][ 90 ][ 9 ][ 8 ]]
+[[ char*->signed char ][ !!! *<1* !!! ][ 82 ][ 9 ][ 8 ]]
+[[ char*->unsigned char ][ !!! *<1* !!! ][ 88 ][ 8 ][ 13 ]]
+[[ char*->int ][ !!! *6* !!! ][ 113 ][ 26 ][ 14 ]]
+[[ char*->short ][ !!! *6* !!! ][ 114 ][ 25 ][ 14 ]]
+[[ char*->long int ][ !!! *6* !!! ][ 123 ][ 38 ][ 17 ]]
+[[ char*->long long ][ !!! *7* !!! ][ 126 ][ 37 ][ 17 ]]
+[[ char*->unsigned int ][ !!! *6* !!! ][ 134 ][ 26 ][ 18 ]]
+[[ char*->unsigned short ][ !!! *8* !!! ][ 126 ][ 24 ][ 17 ]]
+[[ char*->unsigned long int ][ !!! *8* !!! ][ 121 ][ 24 ][ 17 ]]
+[[ char*->unsigned long long ][ !!! *5* !!! ][ 117 ][ 24 ][ 18 ]]
+[[ char*->bool ][ !!! *<1* !!! ][ 116 ][ 24 ][ 9 ]]
+[[ char*->float ][ !!! *16* !!! ][ 171 ][ 67 ][ 30 ]]
+[[ char*->double ][ !!! *15* !!! ][ 204 ][ 109 ][ 64 ]]
+[[ char*->long double ][ 152 ][ 250 ][ 110 ][ !!! *71* !!! ]]
+[[ unsigned char*->char ][ !!! *<1* !!! ][ 109 ][ 11 ][ 11 ]]
+[[ unsigned char*->signed char ][ !!! *<1* !!! ][ 108 ][ 11 ][ 9 ]]
+[[ unsigned char*->unsigned char ][ !!! *<1* !!! ][ 106 ][ 11 ][ 17 ]]
+[[ unsigned char*->int ][ !!! *7* !!! ][ 143 ][ 31 ][ 17 ]]
+[[ unsigned char*->short ][ !!! *9* !!! ][ 143 ][ 32 ][ 19 ]]
+[[ unsigned char*->long int ][ !!! *8* !!! ][ 153 ][ 30 ][ 18 ]]
+[[ unsigned char*->long long ][ !!! *10* !!! ][ 146 ][ 27 ][ 18 ]]
+[[ unsigned char*->unsigned int ][ !!! *9* !!! ][ 144 ][ 25 ][ 18 ]]
+[[ unsigned char*->unsigned short ][ !!! *9* !!! ][ 138 ][ 26 ][ 17 ]]
+[[ unsigned char*->unsigned long int ][ !!! *9* !!! ][ 143 ][ 25 ][ 18 ]]
+[[ unsigned char*->unsigned long long ][ !!! *10* !!! ][ 132 ][ 26 ][ 18 ]]
+[[ unsigned char*->bool ][ !!! *<1* !!! ][ 102 ][ 18 ][ 9 ]]
+[[ unsigned char*->float ][ !!! *13* !!! ][ 171 ][ 65 ][ 31 ]]
+[[ unsigned char*->double ][ !!! *14* !!! ][ 197 ][ 89 ][ 53 ]]
+[[ unsigned char*->long double ][ 122 ][ 208 ][ 89 ][ !!! *58* !!! ]]
+[[ unsigned char*->string ][ !!! *8* !!! ][ 115 ][ 20 ][ --- ]]
+[[ signed char*->char ][ !!! *<1* !!! ][ 93 ][ 10 ][ 9 ]]
+[[ signed char*->signed char ][ !!! *<1* !!! ][ 91 ][ 8 ][ 8 ]]
+[[ signed char*->unsigned char ][ !!! *<1* !!! ][ 90 ][ 10 ][ 15 ]]
+[[ signed char*->int ][ !!! *7* !!! ][ 112 ][ 26 ][ 16 ]]
+[[ signed char*->short ][ !!! *7* !!! ][ 112 ][ 26 ][ 16 ]]
+[[ signed char*->long int ][ !!! *6* !!! ][ 118 ][ 25 ][ 14 ]]
+[[ signed char*->long long ][ !!! *13* !!! ][ 114 ][ 25 ][ 14 ]]
+[[ signed char*->unsigned int ][ !!! *7* !!! ][ 114 ][ 23 ][ 16 ]]
+[[ signed char*->unsigned short ][ !!! *7* !!! ][ 107 ][ 25 ][ 16 ]]
+[[ signed char*->unsigned long int ][ !!! *7* !!! ][ 106 ][ 23 ][ 14 ]]
+[[ signed char*->unsigned long long ][ !!! *7* !!! ][ 103 ][ 22 ][ 16 ]]
+[[ signed char*->bool ][ !!! *<1* !!! ][ 110 ][ 20 ][ 9 ]]
+[[ signed char*->float ][ !!! *13* !!! ][ 175 ][ 66 ][ 32 ]]
+[[ signed char*->double ][ !!! *14* !!! ][ 203 ][ 90 ][ 53 ]]
+[[ signed char*->long double ][ 124 ][ 205 ][ 87 ][ !!! *55* !!! ]]
+[[ signed char*->string ][ !!! *8* !!! ][ 120 ][ 20 ][ --- ]]
+[[ int->int ][ !!! *<1* !!! ][ 116 ][ 28 ][ --- ]]
+[[ float->double ][ !!! *<1* !!! ][ 264 ][ 135 ][ --- ]]
+[[ double->double ][ !!! *<1* !!! ][ 260 ][ 140 ][ --- ]]
+[[ int->int ][ !!! *<1* !!! ][ 275 ][ 135 ][ --- ]]
+[[ int->int ][ !!! *<1* !!! ][ 274 ][ 135 ][ --- ]]
+[[ char->unsigned char ][ !!! *<1* !!! ][ 77 ][ 7 ][ --- ]]
+[[ char->signed char ][ !!! *<1* !!! ][ 79 ][ 7 ][ --- ]]
+[[ unsigned char->char ][ !!! *<1* !!! ][ 78 ][ 8 ][ --- ]]
+[[ signed char->char ][ !!! *<1* !!! ][ 83 ][ 7 ][ --- ]]
+]
+[endsect]
+[section gcc-4.5][table:id Performance Table (gcc-4.5)
+[[From->To] [lexical_cast] [std::stringstream with construction] [std::stringstream without construction][scanf/printf]]
+[[ string->char ][ !!! *<1* !!! ][ 86 ][ 8 ][ 9 ]]
+[[ string->signed char ][ !!! *<1* !!! ][ 88 ][ 9 ][ 9 ]]
+[[ string->unsigned char ][ !!! *<1* !!! ][ 87 ][ 8 ][ 15 ]]
+[[ string->int ][ !!! *6* !!! ][ 107 ][ 23 ][ 16 ]]
+[[ string->short ][ !!! *7* !!! ][ 108 ][ 25 ][ 15 ]]
+[[ string->long int ][ !!! *6* !!! ][ 110 ][ 26 ][ 15 ]]
+[[ string->long long ][ !!! *7* !!! ][ 110 ][ 26 ][ 15 ]]
+[[ string->unsigned int ][ !!! *6* !!! ][ 108 ][ 26 ][ 16 ]]
+[[ string->unsigned short ][ !!! *7* !!! ][ 105 ][ 24 ][ 15 ]]
+[[ string->unsigned long int ][ !!! *6* !!! ][ 108 ][ 23 ][ 15 ]]
+[[ string->unsigned long long ][ !!! *10* !!! ][ 104 ][ 24 ][ 15 ]]
+[[ string->bool ][ !!! *<1* !!! ][ 102 ][ 21 ][ 9 ]]
+[[ string->float ][ !!! *13* !!! ][ 173 ][ 64 ][ 34 ]]
+[[ string->double ][ !!! *15* !!! ][ 196 ][ 89 ][ 53 ]]
+[[ string->long double ][ 126 ][ 211 ][ 90 ][ !!! *56* !!! ]]
+[[ char->string ][ !!! *8* !!! ][ 107 ][ 20 ][ 10 ]]
+[[ unsigned char->string ][ !!! *8* !!! ][ 107 ][ 17 ][ 15 ]]
+[[ signed char->string ][ !!! *8* !!! ][ 108 ][ 19 ][ 10 ]]
+[[ int->string ][ 16 ][ 129 ][ 25 ][ !!! *15* !!! ]]
+[[ short->string ][ !!! *14* !!! ][ 128 ][ 25 ][ 17 ]]
+[[ long int->string ][ 20 ][ 128 ][ 24 ][ !!! *15* !!! ]]
+[[ long long->string ][ !!! *16* !!! ][ 128 ][ 25 ][ 16 ]]
+[[ unsigned int->string ][ !!! *15* !!! ][ 125 ][ 25 ][ 15 ]]
+[[ unsigned short->string ][ !!! *14* !!! ][ 125 ][ 24 ][ 15 ]]
+[[ unsigned long int->string ][ 16 ][ 125 ][ 25 ][ !!! *15* !!! ]]
+[[ unsigned long long->string ][ !!! *18* !!! ][ 140 ][ 32 ][ 22 ]]
+[[ bool->string ][ !!! *8* !!! ][ 121 ][ 24 ][ 10 ]]
+[[ float->string ][ 137 ][ 226 ][ 108 ][ !!! *48* !!! ]]
+[[ double->string ][ 174 ][ 255 ][ 141 ][ !!! *71* !!! ]]
+[[ long double->string ][ 208 ][ 268 ][ 144 ][ !!! *72* !!! ]]
+[[ char*->char ][ !!! *<1* !!! ][ 93 ][ 8 ][ 9 ]]
+[[ char*->signed char ][ !!! *<1* !!! ][ 94 ][ 9 ][ 9 ]]
+[[ char*->unsigned char ][ !!! *<1* !!! ][ 94 ][ 8 ][ 15 ]]
+[[ char*->int ][ !!! *7* !!! ][ 115 ][ 26 ][ 16 ]]
+[[ char*->short ][ !!! *8* !!! ][ 114 ][ 26 ][ 15 ]]
+[[ char*->long int ][ !!! *7* !!! ][ 115 ][ 27 ][ 16 ]]
+[[ char*->long long ][ !!! *7* !!! ][ 114 ][ 26 ][ 16 ]]
+[[ char*->unsigned int ][ !!! *8* !!! ][ 115 ][ 25 ][ 16 ]]
+[[ char*->unsigned short ][ !!! *7* !!! ][ 113 ][ 24 ][ 16 ]]
+[[ char*->unsigned long int ][ !!! *8* !!! ][ 117 ][ 23 ][ 16 ]]
+[[ char*->unsigned long long ][ !!! *8* !!! ][ 107 ][ 25 ][ 16 ]]
+[[ char*->bool ][ !!! *<1* !!! ][ 110 ][ 21 ][ 9 ]]
+[[ char*->float ][ !!! *17* !!! ][ 170 ][ 67 ][ 34 ]]
+[[ char*->double ][ !!! *14* !!! ][ 197 ][ 91 ][ 52 ]]
+[[ char*->long double ][ 127 ][ 206 ][ 89 ][ !!! *56* !!! ]]
+[[ unsigned char*->char ][ !!! *<1* !!! ][ 83 ][ 8 ][ 9 ]]
+[[ unsigned char*->signed char ][ !!! *<1* !!! ][ 83 ][ 10 ][ 9 ]]
+[[ unsigned char*->unsigned char ][ !!! *<1* !!! ][ 83 ][ 8 ][ 15 ]]
+[[ unsigned char*->int ][ !!! *7* !!! ][ 113 ][ 26 ][ 16 ]]
+[[ unsigned char*->short ][ !!! *7* !!! ][ 112 ][ 24 ][ 16 ]]
+[[ unsigned char*->long int ][ !!! *8* !!! ][ 114 ][ 26 ][ 16 ]]
+[[ unsigned char*->long long ][ !!! *8* !!! ][ 113 ][ 26 ][ 16 ]]
+[[ unsigned char*->unsigned int ][ !!! *8* !!! ][ 114 ][ 25 ][ 16 ]]
+[[ unsigned char*->unsigned short ][ !!! *8* !!! ][ 109 ][ 24 ][ 16 ]]
+[[ unsigned char*->unsigned long int ][ !!! *8* !!! ][ 111 ][ 23 ][ 16 ]]
+[[ unsigned char*->unsigned long long ][ !!! *7* !!! ][ 106 ][ 25 ][ 16 ]]
+[[ unsigned char*->bool ][ !!! *<1* !!! ][ 106 ][ 20 ][ 9 ]]
+[[ unsigned char*->float ][ !!! *14* !!! ][ 169 ][ 65 ][ 34 ]]
+[[ unsigned char*->double ][ !!! *16* !!! ][ 198 ][ 91 ][ 52 ]]
+[[ unsigned char*->long double ][ 127 ][ 205 ][ 88 ][ !!! *56* !!! ]]
+[[ unsigned char*->string ][ !!! *10* !!! ][ 123 ][ 21 ][ --- ]]
+[[ signed char*->char ][ !!! *<1* !!! ][ 90 ][ 9 ][ 9 ]]
+[[ signed char*->signed char ][ !!! *<1* !!! ][ 91 ][ 8 ][ 9 ]]
+[[ signed char*->unsigned char ][ !!! *<1* !!! ][ 92 ][ 8 ][ 15 ]]
+[[ signed char*->int ][ !!! *7* !!! ][ 116 ][ 26 ][ 16 ]]
+[[ signed char*->short ][ !!! *8* !!! ][ 113 ][ 26 ][ 15 ]]
+[[ signed char*->long int ][ !!! *8* !!! ][ 113 ][ 24 ][ 16 ]]
+[[ signed char*->long long ][ !!! *8* !!! ][ 113 ][ 27 ][ 16 ]]
+[[ signed char*->unsigned int ][ !!! *8* !!! ][ 113 ][ 25 ][ 16 ]]
+[[ signed char*->unsigned short ][ !!! *7* !!! ][ 107 ][ 24 ][ 16 ]]
+[[ signed char*->unsigned long int ][ !!! *7* !!! ][ 111 ][ 23 ][ 17 ]]
+[[ signed char*->unsigned long long ][ !!! *8* !!! ][ 105 ][ 25 ][ 16 ]]
+[[ signed char*->bool ][ !!! *<1* !!! ][ 106 ][ 21 ][ 9 ]]
+[[ signed char*->float ][ !!! *13* !!! ][ 169 ][ 63 ][ 34 ]]
+[[ signed char*->double ][ !!! *16* !!! ][ 196 ][ 90 ][ 52 ]]
+[[ signed char*->long double ][ 127 ][ 211 ][ 91 ][ !!! *60* !!! ]]
+[[ signed char*->string ][ !!! *9* !!! ][ 123 ][ 21 ][ --- ]]
+[[ int->int ][ !!! *<1* !!! ][ 120 ][ 29 ][ --- ]]
+[[ float->double ][ !!! *<1* !!! ][ 258 ][ 147 ][ --- ]]
+[[ double->double ][ !!! *<1* !!! ][ 261 ][ 140 ][ --- ]]
+[[ int->int ][ !!! *<1* !!! ][ 266 ][ 138 ][ --- ]]
+[[ int->int ][ !!! *<1* !!! ][ 266 ][ 137 ][ --- ]]
+[[ char->unsigned char ][ !!! *<1* !!! ][ 89 ][ 8 ][ --- ]]
+[[ char->signed char ][ !!! *<1* !!! ][ 91 ][ 8 ][ --- ]]
+[[ unsigned char->char ][ !!! *<1* !!! ][ 90 ][ 9 ][ --- ]]
+[[ signed char->char ][ !!! *<1* !!! ][ 89 ][ 8 ][ --- ]]
+]
+[endsect]
+[section intel-12-linux][table:id Performance Table (intel-12-linux)
+[[From->To] [lexical_cast] [std::stringstream with construction] [std::stringstream without construction][scanf/printf]]
+[[ string->char ][ !!! *1* !!! ][ 87 ][ 9 ][ 8 ]]
+[[ string->signed char ][ !!! *<1* !!! ][ 90 ][ 9 ][ 8 ]]
+[[ string->unsigned char ][ !!! *<1* !!! ][ 99 ][ 9 ][ 20 ]]
+[[ string->int ][ !!! *8* !!! ][ 112 ][ 24 ][ 16 ]]
+[[ string->short ][ !!! *8* !!! ][ 110 ][ 26 ][ 16 ]]
+[[ string->long int ][ !!! *7* !!! ][ 110 ][ 23 ][ 16 ]]
+[[ string->long long ][ !!! *10* !!! ][ 114 ][ 31 ][ 16 ]]
+[[ string->unsigned int ][ !!! *7* !!! ][ 122 ][ 25 ][ 16 ]]
+[[ string->unsigned short ][ !!! *7* !!! ][ 120 ][ 27 ][ 16 ]]
+[[ string->unsigned long int ][ !!! *7* !!! ][ 114 ][ 25 ][ 16 ]]
+[[ string->unsigned long long ][ !!! *7* !!! ][ 128 ][ 23 ][ 25 ]]
+[[ string->bool ][ !!! *1* !!! ][ 103 ][ 20 ][ 9 ]]
+[[ string->float ][ !!! *15* !!! ][ 166 ][ 73 ][ 31 ]]
+[[ string->double ][ !!! *19* !!! ][ 206 ][ 103 ][ 56 ]]
+[[ string->long double ][ 142 ][ 205 ][ 106 ][ !!! *61* !!! ]]
+[[ char->string ][ !!! *10* !!! ][ 111 ][ 19 ][ 12 ]]
+[[ unsigned char->string ][ !!! *12* !!! ][ 109 ][ 19 ][ 16 ]]
+[[ signed char->string ][ !!! *9* !!! ][ 110 ][ 18 ][ 12 ]]
+[[ int->string ][ 19 ][ 126 ][ 23 ][ !!! *17* !!! ]]
+[[ short->string ][ 20 ][ 127 ][ 23 ][ !!! *18* !!! ]]
+[[ long int->string ][ 20 ][ 128 ][ 24 ][ !!! *18* !!! ]]
+[[ long long->string ][ !!! *16* !!! ][ 129 ][ 23 ][ 22 ]]
+[[ unsigned int->string ][ 20 ][ 126 ][ 23 ][ !!! *17* !!! ]]
+[[ unsigned short->string ][ 20 ][ 126 ][ 23 ][ !!! *17* !!! ]]
+[[ unsigned long int->string ][ 20 ][ 126 ][ 23 ][ !!! *17* !!! ]]
+[[ unsigned long long->string ][ !!! *24* !!! ][ 134 ][ 35 ][ 24 ]]
+[[ bool->string ][ !!! *9* !!! ][ 124 ][ 29 ][ 12 ]]
+[[ float->string ][ 147 ][ 218 ][ 104 ][ !!! *48* !!! ]]
+[[ double->string ][ 202 ][ 245 ][ 128 ][ !!! *68* !!! ]]
+[[ long double->string ][ 199 ][ 236 ][ 128 ][ !!! *69* !!! ]]
+[[ char*->char ][ !!! *1* !!! ][ 91 ][ 10 ][ 9 ]]
+[[ char*->signed char ][ !!! *1* !!! ][ 98 ][ 10 ][ 9 ]]
+[[ char*->unsigned char ][ !!! *1* !!! ][ 97 ][ 14 ][ 15 ]]
+[[ char*->int ][ !!! *8* !!! ][ 114 ][ 24 ][ 16 ]]
+[[ char*->short ][ !!! *8* !!! ][ 112 ][ 27 ][ 15 ]]
+[[ char*->long int ][ !!! *8* !!! ][ 117 ][ 28 ][ 16 ]]
+[[ char*->long long ][ !!! *8* !!! ][ 123 ][ 30 ][ 16 ]]
+[[ char*->unsigned int ][ !!! *8* !!! ][ 120 ][ 26 ][ 16 ]]
+[[ char*->unsigned short ][ !!! *8* !!! ][ 122 ][ 30 ][ 16 ]]
+[[ char*->unsigned long int ][ !!! *10* !!! ][ 119 ][ 25 ][ 16 ]]
+[[ char*->unsigned long long ][ !!! *8* !!! ][ 140 ][ 54 ][ 34 ]]
+[[ char*->bool ][ !!! *1* !!! ][ 108 ][ 21 ][ 8 ]]
+[[ char*->float ][ !!! *16* !!! ][ 177 ][ 76 ][ 33 ]]
+[[ char*->double ][ !!! *18* !!! ][ 271 ][ 104 ][ 56 ]]
+[[ char*->long double ][ 142 ][ 207 ][ 106 ][ !!! *61* !!! ]]
+[[ unsigned char*->char ][ !!! *1* !!! ][ 91 ][ 10 ][ 9 ]]
+[[ unsigned char*->signed char ][ !!! *1* !!! ][ 92 ][ 10 ][ 8 ]]
+[[ unsigned char*->unsigned char ][ !!! *1* !!! ][ 92 ][ 10 ][ 15 ]]
+[[ unsigned char*->int ][ !!! *8* !!! ][ 111 ][ 24 ][ 16 ]]
+[[ unsigned char*->short ][ !!! *9* !!! ][ 113 ][ 27 ][ 16 ]]
+[[ unsigned char*->long int ][ !!! *7* !!! ][ 113 ][ 28 ][ 16 ]]
+[[ unsigned char*->long long ][ !!! *7* !!! ][ 120 ][ 29 ][ 15 ]]
+[[ unsigned char*->unsigned int ][ !!! *7* !!! ][ 119 ][ 24 ][ 15 ]]
+[[ unsigned char*->unsigned short ][ !!! *8* !!! ][ 116 ][ 28 ][ 15 ]]
+[[ unsigned char*->unsigned long int ][ !!! *7* !!! ][ 118 ][ 25 ][ 16 ]]
+[[ unsigned char*->unsigned long long ][ !!! *7* !!! ][ 116 ][ 25 ][ 16 ]]
+[[ unsigned char*->bool ][ !!! *1* !!! ][ 102 ][ 20 ][ 9 ]]
+[[ unsigned char*->float ][ !!! *16* !!! ][ 167 ][ 74 ][ 31 ]]
+[[ unsigned char*->double ][ !!! *19* !!! ][ 231 ][ 109 ][ 55 ]]
+[[ unsigned char*->long double ][ 141 ][ 214 ][ 109 ][ !!! *61* !!! ]]
+[[ unsigned char*->string ][ !!! *12* !!! ][ 122 ][ 23 ][ --- ]]
+[[ signed char*->char ][ !!! *1* !!! ][ 91 ][ 10 ][ 8 ]]
+[[ signed char*->signed char ][ !!! *1* !!! ][ 92 ][ 10 ][ 9 ]]
+[[ signed char*->unsigned char ][ !!! *1* !!! ][ 92 ][ 10 ][ 15 ]]
+[[ signed char*->int ][ !!! *7* !!! ][ 117 ][ 34 ][ 16 ]]
+[[ signed char*->short ][ !!! *8* !!! ][ 117 ][ 25 ][ 15 ]]
+[[ signed char*->long int ][ !!! *7* !!! ][ 115 ][ 28 ][ 16 ]]
+[[ signed char*->long long ][ !!! *8* !!! ][ 116 ][ 31 ][ 15 ]]
+[[ signed char*->unsigned int ][ !!! *8* !!! ][ 123 ][ 27 ][ 16 ]]
+[[ signed char*->unsigned short ][ !!! *8* !!! ][ 120 ][ 27 ][ 16 ]]
+[[ signed char*->unsigned long int ][ !!! *7* !!! ][ 119 ][ 26 ][ 16 ]]
+[[ signed char*->unsigned long long ][ !!! *7* !!! ][ 118 ][ 26 ][ 17 ]]
+[[ signed char*->bool ][ !!! *1* !!! ][ 108 ][ 26 ][ 9 ]]
+[[ signed char*->float ][ !!! *16* !!! ][ 170 ][ 73 ][ 31 ]]
+[[ signed char*->double ][ !!! *18* !!! ][ 210 ][ 112 ][ 55 ]]
+[[ signed char*->long double ][ 137 ][ 210 ][ 107 ][ !!! *61* !!! ]]
+[[ signed char*->string ][ !!! *14* !!! ][ 121 ][ 23 ][ --- ]]
+[[ int->int ][ !!! *<1* !!! ][ 115 ][ 26 ][ --- ]]
+[[ float->double ][ !!! *<1* !!! ][ 266 ][ 155 ][ --- ]]
+[[ double->double ][ !!! *<1* !!! ][ 267 ][ 157 ][ --- ]]
+[[ int->int ][ !!! *<1* !!! ][ 261 ][ 153 ][ --- ]]
+[[ int->int ][ !!! *<1* !!! ][ 264 ][ 152 ][ --- ]]
+[[ char->unsigned char ][ !!! *<1* !!! ][ 96 ][ 9 ][ --- ]]
+[[ char->signed char ][ !!! *<1* !!! ][ 96 ][ 9 ][ --- ]]
+[[ unsigned char->char ][ !!! *<1* !!! ][ 93 ][ 9 ][ --- ]]
+[[ signed char->char ][ !!! *<1* !!! ][ 87 ][ 9 ][ --- ]]
+]
+[endsect]
+
+
+
+[/ END of section, generated by performance measuring program ]
+[endsect]
+


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk