diff --git a/doc/lexical_cast.qbk b/doc/lexical_cast.qbk
new file mode 100644
index 0000000..fe974d0
--- /dev/null
+++ b/doc/lexical_cast.qbk
@@ -0,0 +1,736 @@
+[library Boost.Lexical_Cast
+    [quickbook 1.5]
+    [version 1.0]
+    [copyright 2000-2005 Kevlin Henney]
+    [copyright 2006-2010 Alexander Nasonov]
+    [copyright 2011-2014 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]
+
+[import ../example/args_to_numbers.cpp]
+
+[section Strings to numbers conversion] [lexical_cast_args_example] [endsect]
+
+[import ../example/small_examples.cpp]
+[section Numbers to strings conversion] [lexical_cast_log_errno] [endsect]
+[section Converting to string without dynamic memory allocation] [lexical_cast_fixed_buffer] [endsect]
+[section Converting part of the string] [lexical_cast_substring_conversion] [endsect]
+
+[import ../example/generic_stringize.cpp]
+[section Generic programming (Boost.Fusion)] [lexical_cast_stringize] [endsect]
+
+[import ../example/variant_to_long_double.cpp]
+[section Generic programming (Boost.Variant)] [lexical_cast_variant_to_long_double] [endsect]
+
+[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);
+
+        template <typename Target>
+          Target lexical_cast(const AnyCharacterType* chars, std::size_t count);
+
+        namespace conversion
+        {
+            template<typename Target, typename Source>
+                bool try_lexical_convert(const Source& arg, Target& result);
+
+            template <typename AnyCharacterType, typename Target>
+                bool try_lexical_convert(const AnyCharacterType* chars, std::size_t count, Target& result);
+
+        } // namespace conversion
+    } // namespace boost
+``
+
+[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.
+
+``
+    template <typename Target>
+      Target lexical_cast(const AnyCharacterType* chars, std::size_t count);
+``
+Takes an array of `count` characters as input parameter and streams them out as a Target object. If the conversion is unsuccessful, a `bad_lexical_cast` exception is thrown. This call may be useful for processing nonzero terminated array of characters or processing just some part of character array.
+
+The requirements on the argument and result types for both functions 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`. Following types also can use `char16_t` or `char32_t` for wide-character streaming:
+
+* Single character: `char16_t`, `char32_t`
+* Arrays of characters: `char16_t *`, `char32_t *`, `const char16_t *`, `const char32_t *`
+* Strings: `std::basic_string`, `boost::containers::basic_string`
+* `boost::iterator_range<WideCharPtr>`, where `WideCharPtr` is a pointer to wide-character or pointer to const wide-character
+* `boost::array<CharT, N>` and `std::array<CharT, N>`, `boost::array<const CharT, N>` and `std::array<const CharT, N>` 
+
+[important Many compilers and runtime libraries fail to make conversions using new Unicode characters. Make sure that the following code compiles and outputs nonzero values, before using new types:
+``
+    std::cout
+        << boost::lexical_cast<std::u32string>(1.0).size()
+        << "  "
+        << boost::lexical_cast<std::u16string>(1.0).size();
+``
+]
+
+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]
+
+[section try_lexical_convert]
+`boost::lexical_cast` remains the main interface for lexical conversions. It must be used by default in most cases. However
+some developers wish to make their own conversion functions, reusing all the optimizations of the `boost::lexical_cast`.
+That's where the `boost::conversion::try_lexical_convert` function steps in.
+
+`try_lexical_convert` returns `true` if conversion succeeded, otherwise returns `false`. If conversion
+failed and `false` was returned, state of `result` output variable is undefined.
+
+Actually, `boost::lexical_cast` is implemented using `try_lexical_convert`:
+``
+    template <typename Target, typename Source>
+    inline Target lexical_cast(const Source &arg)
+    {
+        Target result;
+
+        if (!conversion::try_lexical_convert(arg, result))
+            throw bad_lexical_cast();
+
+        return result;
+    }
+``
+
+`try_lexical_convert` relaxes the CopyConstructible and DefaultConstructible requirements for `Target` type.
+Following requirements for `Target` and `Source` remain:
+
+* Source must be 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 must be 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.
+
+[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>>` more general.
+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.
+
+[pre
+]
+
+* [*Question:]    Why `boost::lexical_cast<int>(L'A');` outputs 65 and `boost::lexical_cast<wchar_t>(L"65");` does not throw?
+  * [*Answer:]      If you are using an old version of Visual Studio or compile code with /Zc:wchar_t- flag,
+`boost::lexical_cast` sees single `wchar_t` character as `unsigned short`. It is not a `boost::lexical_cast` mistake, but a
+limitation of compiler options that you use.
+
+[pre
+]
+
+* [*Question:]    Why `boost::lexical_cast<double>("-1.#IND");` throws `boost::bad_lexical_cast`?
+  * [*Answer:]      `"-1.#IND"` is a compiler extension, that violates standard. You shall input `"-nan"`, `"nan"`, `"inf"`
+, `"-inf"` (case insensitive) strings to get NaN and Inf values. `boost::lexical_cast<string>` outputs `"-nan"`, `"nan"`,
+`"inf"`, `"-inf"` strings, when has NaN or Inf input values.
+
+[pre
+]
+
+* [*Question:]    What is the fastest way to convert a non zero terminated string or a substring using `boost::lexical_cast`?
+  * [*Answer:]      Use `boost::iterator_range` for conversion or `lexical_cast` overload with two parameters. For example, if you whant to convert to `int` two characters from a string `str`, you shall write `lexical_cast<int>(make_iterator_range(str.data(), str.data() + 2));` or `lexical_cast<int>(str.data(), 2);`.
+
+[endsect]
+
+[section Changes]
+
+* [*boost 1.56.0 :]
+
+    * Added `boost::conversion::try_lexical_convert` functions.
+
+* [*boost 1.54.0 :]
+
+    * Fix some issues with `boost::int128_type` and `boost::uint128_type` conversions. Notify user at compile time 
+      if the `std::numeric_limits` are not specialized for 128bit types and `boost::lexical_cast` can not make conversions.
+
+* [*boost 1.54.0 :]
+
+    * Added code to convert `boost::int128_type` and `boost::uint128_type` types (requires GCC 4.7 or higher).
+    * Conversions to pointers will now fail to compile, instead of throwing at runtime.
+    * Restored ability to get pointers to `lexical_cast` function (was broken in 1.53.0).
+
+* [*boost 1.53.0 :]
+
+    * Much better input and output streams detection for user defined types.
+
+* [*boost 1.52.0 :]
+
+    * Restored compilation on MSVC-2003 (was broken in 1.51.0).
+    * Added `lexical_cast(const CharType* chars, std::size_t count)` function overload.
+    
+* [*boost 1.51.0 :]
+
+    * Better performance, less memory usage for `boost::array<character_type, N>` and `std::array<character_type, N>` conversions.
+
+* [*boost 1.50.0 :]
+
+    * `boost::bad_lexical_cast` exception is now globaly visible and can be catched even if code is compiled with -fvisibility=hidden.
+    * Now it is possible to compile library with disabled exceptions.
+    * Better performance, less memory usage and bugfixes for `boost::iterator_range<character_type*>` conversions.
+
+* [*boost 1.49.0 :]
+
+    * Restored work with typedefed wchar_t (compilation flag /Zc:wchar_t- for Visual Studio).
+    * Better performance and less memory usage for `boost::container::basic_string` conversions.
+
+* [*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 GNU C++ version 6.1.1 20160511]
+[table:id Performance Table ( GNU C++ version 6.1.1 20160511)
+[[From->To] [lexical_cast] [std::stringstream with construction] [std::stringstream without construction][scanf/printf]]
+  [[ string->char ][ !!! *<1* !!! ][ 59 ][ 4 ][ 4 ]]
+  [[ string->signed char ][ !!! *<1* !!! ][ 52 ][ 4 ][ 5 ]]
+  [[ string->unsigned char ][ !!! *<1* !!! ][ 54 ][ 4 ][ 5 ]]
+  [[ string->int ][ !!! *4* !!! ][ 61 ][ 19 ][ 12 ]]
+  [[ string->short ][ !!! *4* !!! ][ 59 ][ 11 ][ 8 ]]
+  [[ string->long int ][ !!! *4* !!! ][ 59 ][ 9 ][ 8 ]]
+  [[ string->long long ][ !!! *6* !!! ][ 61 ][ 10 ][ 10 ]]
+  [[ string->unsigned int ][ !!! *4* !!! ][ 59 ][ 9 ][ 9 ]]
+  [[ string->unsigned short ][ !!! *4* !!! ][ 60 ][ 9 ][ 8 ]]
+  [[ string->unsigned long int ][ !!! *4* !!! ][ 60 ][ 9 ][ 8 ]]
+  [[ string->unsigned long long ][ !!! *4* !!! ][ 70 ][ 21 ][ 21 ]]
+  [[ string->float ][ 91 ][ 152 ][ 59 ][ !!! *40* !!! ]]
+  [[ string->double ][ 86 ][ 140 ][ 58 ][ !!! *28* !!! ]]
+  [[ string->long double ][ 48 ][ 90 ][ 34 ][ !!! *22* !!! ]]
+  [[ string->array<char, 50> ][ !!! *<1* !!! ][ 59 ][ 9 ][ 10 ]]
+  [[ string->string ][ !!! *2* !!! ][ 129 ][ 29 ][ --- ]]
+  [[ string->container::string ][ !!! *1* !!! ][ 70 ][ 11 ][ --- ]]
+  [[ string->char ][ !!! *4* !!! ][ 99 ][ 27 ][ 20 ]]
+  [[ string->signed char ][ !!! *9* !!! ][ 101 ][ 13 ][ 12 ]]
+  [[ string->unsigned char ][ !!! *4* !!! ][ 86 ][ 27 ][ 27 ]]
+  [[ int->string ][ !!! *9* !!! ][ 89 ][ 17 ][ 14 ]]
+  [[ short->string ][ !!! *7* !!! ][ 71 ][ 17 ][ 15 ]]
+  [[ long int->string ][ !!! *7* !!! ][ 71 ][ 18 ][ 19 ]]
+  [[ long long->string ][ !!! *13* !!! ][ 127 ][ 34 ][ 25 ]]
+  [[ unsigned int->string ][ 16 ][ 117 ][ 17 ][ !!! *12* !!! ]]
+  [[ unsigned short->string ][ !!! *8* !!! ][ 71 ][ 16 ][ 12 ]]
+  [[ unsigned long int->string ][ !!! *12* !!! ][ 100 ][ 36 ][ 26 ]]
+  [[ unsigned long long->string ][ !!! *14* !!! ][ 97 ][ 21 ][ 17 ]]
+  [[ float->string ][ 70 ][ 97 ][ 43 ][ !!! *25* !!! ]]
+  [[ double->string ][ 130 ][ 155 ][ 51 ][ !!! *25* !!! ]]
+  [[ long double->string ][ 104 ][ 160 ][ !!! *47* !!! ][ 57 ]]
+  [[ char*->char ][ !!! *<1* !!! ][ 95 ][ 4 ][ 4 ]]
+  [[ char*->signed char ][ !!! *<1* !!! ][ 52 ][ 7 ][ 13 ]]
+  [[ char*->unsigned char ][ !!! *<1* !!! ][ 106 ][ 11 ][ 13 ]]
+  [[ char*->int ][ !!! *6* !!! ][ 118 ][ 22 ][ 21 ]]
+  [[ char*->short ][ !!! *7* !!! ][ 104 ][ 10 ][ 19 ]]
+  [[ char*->long int ][ !!! *8* !!! ][ 112 ][ 24 ][ 14 ]]
+  [[ char*->long long ][ !!! *4* !!! ][ 90 ][ 17 ][ 9 ]]
+  [[ char*->unsigned int ][ !!! *4* !!! ][ 103 ][ 23 ][ 22 ]]
+  [[ char*->unsigned short ][ !!! *7* !!! ][ 82 ][ 9 ][ 8 ]]
+  [[ char*->unsigned long int ][ !!! *5* !!! ][ 58 ][ 20 ][ 8 ]]
+  [[ char*->unsigned long long ][ !!! *4* !!! ][ 60 ][ 10 ][ 11 ]]
+  [[ char*->float ][ 58 ][ 103 ][ !!! *32* !!! ][ 37 ]]
+  [[ char*->double ][ 52 ][ 155 ][ 32 ][ !!! *27* !!! ]]
+  [[ char*->long double ][ 72 ][ 135 ][ 51 ][ !!! *30* !!! ]]
+  [[ char*->array<char, 50> ][ !!! *<1* !!! ][ 80 ][ 23 ][ 17 ]]
+  [[ char*->string ][ !!! *10* !!! ][ 150 ][ 18 ][ --- ]]
+  [[ char*->container::string ][ !!! *<1* !!! ][ 64 ][ 11 ][ --- ]]
+  [[ unsigned char*->char ][ !!! *<1* !!! ][ 52 ][ 4 ][ 4 ]]
+  [[ unsigned char*->signed char ][ !!! *<1* !!! ][ 54 ][ 4 ][ 5 ]]
+  [[ unsigned char*->unsigned char ][ !!! *<1* !!! ][ 54 ][ 4 ][ 5 ]]
+  [[ unsigned char*->int ][ !!! *4* !!! ][ 59 ][ 10 ][ 8 ]]
+  [[ unsigned char*->short ][ !!! *4* !!! ][ 59 ][ 10 ][ 8 ]]
+  [[ unsigned char*->long int ][ !!! *4* !!! ][ 66 ][ 24 ][ 19 ]]
+  [[ unsigned char*->long long ][ !!! *4* !!! ][ 59 ][ 10 ][ 8 ]]
+  [[ unsigned char*->unsigned int ][ !!! *4* !!! ][ 79 ][ 24 ][ 22 ]]
+  [[ unsigned char*->unsigned short ][ !!! *7* !!! ][ 123 ][ 23 ][ 22 ]]
+  [[ unsigned char*->unsigned long int ][ !!! *8* !!! ][ 121 ][ 24 ][ 22 ]]
+  [[ unsigned char*->unsigned long long ][ !!! *8* !!! ][ 121 ][ 24 ][ 22 ]]
+  [[ unsigned char*->float ][ 97 ][ 167 ][ 67 ][ !!! *47* !!! ]]
+  [[ unsigned char*->double ][ 96 ][ 164 ][ 67 ][ !!! *47* !!! ]]
+  [[ unsigned char*->long double ][ 97 ][ 165 ][ 66 ][ !!! *47* !!! ]]
+  [[ unsigned char*->array<char, 50> ][ !!! *<1* !!! ][ 119 ][ 22 ][ 17 ]]
+  [[ unsigned char*->string ][ !!! *11* !!! ][ 139 ][ 34 ][ --- ]]
+  [[ unsigned char*->container::string ][ !!! *1* !!! ][ 121 ][ 25 ][ --- ]]
+  [[ signed char*->char ][ !!! *<1* !!! ][ 106 ][ 11 ][ 8 ]]
+  [[ signed char*->signed char ][ !!! *<1* !!! ][ 81 ][ 12 ][ 13 ]]
+  [[ signed char*->unsigned char ][ !!! *<1* !!! ][ 109 ][ 11 ][ 12 ]]
+  [[ signed char*->int ][ !!! *7* !!! ][ 122 ][ 24 ][ 21 ]]
+  [[ signed char*->short ][ !!! *4* !!! ][ 59 ][ 10 ][ 8 ]]
+  [[ signed char*->long int ][ !!! *4* !!! ][ 60 ][ 10 ][ 8 ]]
+  [[ signed char*->long long ][ !!! *4* !!! ][ 60 ][ 10 ][ 8 ]]
+  [[ signed char*->unsigned int ][ !!! *4* !!! ][ 64 ][ 23 ][ 22 ]]
+  [[ signed char*->unsigned short ][ !!! *7* !!! ][ 120 ][ 24 ][ 22 ]]
+  [[ signed char*->unsigned long int ][ !!! *8* !!! ][ 121 ][ 24 ][ 22 ]]
+  [[ signed char*->unsigned long long ][ !!! *8* !!! ][ 122 ][ 23 ][ 22 ]]
+  [[ signed char*->float ][ 95 ][ 165 ][ 68 ][ !!! *46* !!! ]]
+  [[ signed char*->double ][ 95 ][ 161 ][ 66 ][ !!! *47* !!! ]]
+  [[ signed char*->long double ][ 96 ][ 161 ][ 66 ][ !!! *46* !!! ]]
+  [[ signed char*->array<char, 50> ][ !!! *<1* !!! ][ 117 ][ 22 ][ 17 ]]
+  [[ signed char*->string ][ !!! *10* !!! ][ 84 ][ 15 ][ --- ]]
+  [[ signed char*->container::string ][ !!! *1* !!! ][ 119 ][ 25 ][ --- ]]
+  [[ iterator_range<char*>->char ][ !!! *<1* !!! ][ 111 ][ 16 ][ 11 ]]
+  [[ iterator_range<char*>->signed char ][ !!! *<1* !!! ][ 110 ][ 16 ][ 13 ]]
+  [[ iterator_range<char*>->unsigned char ][ !!! *<1* !!! ][ 111 ][ 15 ][ 13 ]]
+  [[ iterator_range<char*>->int ][ !!! *6* !!! ][ 119 ][ 25 ][ 22 ]]
+  [[ iterator_range<char*>->short ][ !!! *7* !!! ][ 119 ][ 25 ][ 22 ]]
+  [[ iterator_range<char*>->long int ][ !!! *7* !!! ][ 120 ][ 25 ][ 22 ]]
+  [[ iterator_range<char*>->long long ][ !!! *8* !!! ][ 119 ][ 24 ][ 22 ]]
+  [[ iterator_range<char*>->unsigned int ][ !!! *6* !!! ][ 119 ][ 24 ][ 22 ]]
+  [[ iterator_range<char*>->unsigned short ][ !!! *6* !!! ][ 117 ][ 24 ][ 22 ]]
+  [[ iterator_range<char*>->unsigned long int ][ !!! *7* !!! ][ 120 ][ 24 ][ 22 ]]
+  [[ iterator_range<char*>->unsigned long long ][ !!! *8* !!! ][ 118 ][ 24 ][ 22 ]]
+  [[ iterator_range<char*>->float ][ 96 ][ 155 ][ 48 ][ !!! *47* !!! ]]
+  [[ iterator_range<char*>->double ][ 96 ][ 141 ][ 47 ][ !!! *47* !!! ]]
+  [[ iterator_range<char*>->long double ][ 96 ][ 140 ][ 46 ][ !!! *46* !!! ]]
+  [[ iterator_range<char*>->array<char, 50> ][ !!! *<1* !!! ][ 118 ][ 25 ][ 17 ]]
+  [[ iterator_range<char*>->string ][ !!! *10* !!! ][ 136 ][ 35 ][ --- ]]
+  [[ iterator_range<char*>->container::string ][ !!! *1* !!! ][ 119 ][ 26 ][ --- ]]
+  [[ array<char, 50>->char ][ !!! *<1* !!! ][ 108 ][ 11 ][ 10 ]]
+  [[ array<char, 50>->signed char ][ !!! *<1* !!! ][ 106 ][ 12 ][ 12 ]]
+  [[ array<char, 50>->unsigned char ][ !!! *<1* !!! ][ 107 ][ 11 ][ 13 ]]
+  [[ array<char, 50>->int ][ !!! *6* !!! ][ 119 ][ 24 ][ 22 ]]
+  [[ array<char, 50>->short ][ !!! *7* !!! ][ 121 ][ 24 ][ 22 ]]
+  [[ array<char, 50>->long int ][ !!! *7* !!! ][ 119 ][ 24 ][ 22 ]]
+  [[ array<char, 50>->long long ][ !!! *7* !!! ][ 123 ][ 24 ][ 22 ]]
+  [[ array<char, 50>->unsigned int ][ !!! *7* !!! ][ 121 ][ 23 ][ 25 ]]
+  [[ array<char, 50>->unsigned short ][ !!! *6* !!! ][ 120 ][ 24 ][ 22 ]]
+  [[ array<char, 50>->unsigned long int ][ !!! *7* !!! ][ 59 ][ 10 ][ 9 ]]
+  [[ array<char, 50>->unsigned long long ][ !!! *4* !!! ][ 60 ][ 10 ][ 8 ]]
+  [[ array<char, 50>->float ][ 47 ][ 80 ][ 32 ][ !!! *22* !!! ]]
+  [[ array<char, 50>->double ][ 46 ][ 82 ][ 31 ][ !!! *22* !!! ]]
+  [[ array<char, 50>->long double ][ 49 ][ 82 ][ 31 ][ !!! *22* !!! ]]
+  [[ array<char, 50>->array<char, 50> ][ !!! *1* !!! ][ 59 ][ 9 ][ 7 ]]
+  [[ array<char, 50>->string ][ !!! *5* !!! ][ 70 ][ 15 ][ --- ]]
+  [[ array<char, 50>->container::string ][ !!! *1* !!! ][ 60 ][ 11 ][ --- ]]
+  [[ int->int ][ !!! *<1* !!! ][ 61 ][ 12 ][ --- ]]
+  [[ float->double ][ !!! *<1* !!! ][ 111 ][ 54 ][ --- ]]
+  [[ char->signed char ][ !!! *<1* !!! ][ 51 ][ 4 ][ --- ]]
+]
+[endsect]
+
+[section GNU C++ version 4.8.5]
+[table:id Performance Table ( GNU C++ version 4.8.5)
+[[From->To] [lexical_cast] [std::stringstream with construction] [std::stringstream without construction][scanf/printf]]
+  [[ string->char ][ !!! *<1* !!! ][ 100 ][ 10 ][ 10 ]]
+  [[ string->signed char ][ !!! *<1* !!! ][ 97 ][ 9 ][ 11 ]]
+  [[ string->unsigned char ][ !!! *<1* !!! ][ 103 ][ 11 ][ 13 ]]
+  [[ string->int ][ !!! *6* !!! ][ 122 ][ 23 ][ 22 ]]
+  [[ string->short ][ !!! *6* !!! ][ 116 ][ 23 ][ 22 ]]
+  [[ string->long int ][ !!! *6* !!! ][ 97 ][ 21 ][ 22 ]]
+  [[ string->long long ][ !!! *7* !!! ][ 118 ][ 22 ][ 22 ]]
+  [[ string->unsigned int ][ !!! *6* !!! ][ 116 ][ 22 ][ 22 ]]
+  [[ string->unsigned short ][ !!! *6* !!! ][ 106 ][ 9 ][ 8 ]]
+  [[ string->unsigned long int ][ !!! *3* !!! ][ 59 ][ 9 ][ 8 ]]
+  [[ string->unsigned long long ][ !!! *3* !!! ][ 58 ][ 9 ][ 8 ]]
+  [[ string->float ][ 88 ][ 166 ][ 70 ][ !!! *47* !!! ]]
+  [[ string->double ][ 102 ][ 162 ][ 65 ][ !!! *51* !!! ]]
+  [[ string->long double ][ 96 ][ 163 ][ 71 ][ !!! *46* !!! ]]
+  [[ string->array<char, 50> ][ !!! *1* !!! ][ 112 ][ 21 ][ 18 ]]
+  [[ string->string ][ !!! *2* !!! ][ 139 ][ 37 ][ --- ]]
+  [[ string->container::string ][ !!! *1* !!! ][ 121 ][ 24 ][ --- ]]
+  [[ string->char ][ !!! *9* !!! ][ 121 ][ 31 ][ 21 ]]
+  [[ string->signed char ][ !!! *9* !!! ][ 121 ][ 31 ][ 34 ]]
+  [[ string->unsigned char ][ !!! *9* !!! ][ 120 ][ 31 ][ 30 ]]
+  [[ int->string ][ !!! *17* !!! ][ 141 ][ 39 ][ 30 ]]
+  [[ short->string ][ !!! *18* !!! ][ 142 ][ 39 ][ 30 ]]
+  [[ long int->string ][ 17 ][ 136 ][ 17 ][ !!! *12* !!! ]]
+  [[ long long->string ][ !!! *7* !!! ][ 69 ][ 17 ][ 13 ]]
+  [[ unsigned int->string ][ !!! *8* !!! ][ 70 ][ 24 ][ 13 ]]
+  [[ unsigned short->string ][ !!! *7* !!! ][ 69 ][ 17 ][ 12 ]]
+  [[ unsigned long int->string ][ !!! *7* !!! ][ 71 ][ 16 ][ 12 ]]
+  [[ unsigned long long->string ][ !!! *7* !!! ][ 71 ][ 16 ][ 12 ]]
+  [[ float->string ][ 60 ][ 95 ][ 49 ][ !!! *24* !!! ]]
+  [[ double->string ][ 68 ][ 97 ][ 45 ][ !!! *26* !!! ]]
+  [[ long double->string ][ 72 ][ 108 ][ 45 ][ !!! *28* !!! ]]
+  [[ char*->char ][ !!! *<1* !!! ][ 52 ][ 5 ][ 4 ]]
+  [[ char*->signed char ][ !!! *<1* !!! ][ 52 ][ 5 ][ 5 ]]
+  [[ char*->unsigned char ][ !!! *<1* !!! ][ 52 ][ 5 ][ 5 ]]
+  [[ char*->int ][ !!! *3* !!! ][ 60 ][ 10 ][ 8 ]]
+  [[ char*->short ][ !!! *3* !!! ][ 61 ][ 10 ][ 8 ]]
+  [[ char*->long int ][ !!! *4* !!! ][ 60 ][ 10 ][ 8 ]]
+  [[ char*->long long ][ !!! *4* !!! ][ 61 ][ 9 ][ 8 ]]
+  [[ char*->unsigned int ][ !!! *3* !!! ][ 103 ][ 13 ][ 8 ]]
+  [[ char*->unsigned short ][ !!! *3* !!! ][ 97 ][ 23 ][ 22 ]]
+  [[ char*->unsigned long int ][ !!! *7* !!! ][ 123 ][ 23 ][ 22 ]]
+  [[ char*->unsigned long long ][ !!! *6* !!! ][ 72 ][ 10 ][ 8 ]]
+  [[ char*->float ][ 85 ][ 160 ][ 66 ][ !!! *47* !!! ]]
+  [[ char*->double ][ 94 ][ 161 ][ 65 ][ !!! *46* !!! ]]
+  [[ char*->long double ][ 94 ][ 172 ][ 64 ][ !!! *47* !!! ]]
+  [[ char*->array<char, 50> ][ !!! *2* !!! ][ 113 ][ 22 ][ 16 ]]
+  [[ char*->string ][ !!! *10* !!! ][ 145 ][ 34 ][ --- ]]
+  [[ char*->container::string ][ !!! *1* !!! ][ 120 ][ 25 ][ --- ]]
+  [[ unsigned char*->char ][ !!! *<1* !!! ][ 102 ][ 11 ][ 10 ]]
+  [[ unsigned char*->signed char ][ !!! *<1* !!! ][ 100 ][ 12 ][ 12 ]]
+  [[ unsigned char*->unsigned char ][ !!! *<1* !!! ][ 102 ][ 11 ][ 12 ]]
+  [[ unsigned char*->int ][ !!! *7* !!! ][ 119 ][ 24 ][ 22 ]]
+  [[ unsigned char*->short ][ !!! *7* !!! ][ 120 ][ 24 ][ 22 ]]
+  [[ unsigned char*->long int ][ !!! *7* !!! ][ 119 ][ 24 ][ 23 ]]
+  [[ unsigned char*->long long ][ !!! *7* !!! ][ 119 ][ 24 ][ 22 ]]
+  [[ unsigned char*->unsigned int ][ !!! *6* !!! ][ 82 ][ 9 ][ 8 ]]
+  [[ unsigned char*->unsigned short ][ !!! *3* !!! ][ 58 ][ 9 ][ 8 ]]
+  [[ unsigned char*->unsigned long int ][ !!! *4* !!! ][ 59 ][ 10 ][ 10 ]]
+  [[ unsigned char*->unsigned long long ][ !!! *4* !!! ][ 60 ][ 12 ][ 8 ]]
+  [[ unsigned char*->float ][ 47 ][ 80 ][ 32 ][ !!! *22* !!! ]]
+  [[ unsigned char*->double ][ 47 ][ 79 ][ 31 ][ !!! *23* !!! ]]
+  [[ unsigned char*->long double ][ 47 ][ 80 ][ 31 ][ !!! *22* !!! ]]
+  [[ unsigned char*->array<char, 50> ][ !!! *1* !!! ][ 58 ][ 9 ][ 7 ]]
+  [[ unsigned char*->string ][ !!! *4* !!! ][ 68 ][ 15 ][ --- ]]
+  [[ unsigned char*->container::string ][ !!! *<1* !!! ][ 60 ][ 10 ][ --- ]]
+  [[ signed char*->char ][ !!! *<1* !!! ][ 52 ][ 5 ][ 4 ]]
+  [[ signed char*->signed char ][ !!! *<1* !!! ][ 54 ][ 4 ][ 5 ]]
+  [[ signed char*->unsigned char ][ !!! *<1* !!! ][ 52 ][ 4 ][ 6 ]]
+  [[ signed char*->int ][ !!! *6* !!! ][ 59 ][ 10 ][ 8 ]]
+  [[ signed char*->short ][ !!! *3* !!! ][ 59 ][ 10 ][ 8 ]]
+  [[ signed char*->long int ][ !!! *4* !!! ][ 60 ][ 10 ][ 8 ]]
+  [[ signed char*->long long ][ !!! *4* !!! ][ 59 ][ 10 ][ 9 ]]
+  [[ signed char*->unsigned int ][ !!! *3* !!! ][ 58 ][ 9 ][ 8 ]]
+  [[ signed char*->unsigned short ][ !!! *4* !!! ][ 58 ][ 9 ][ 8 ]]
+  [[ signed char*->unsigned long int ][ !!! *4* !!! ][ 59 ][ 10 ][ 8 ]]
+  [[ signed char*->unsigned long long ][ !!! *4* !!! ][ 59 ][ 10 ][ 8 ]]
+  [[ signed char*->float ][ 47 ][ 81 ][ 32 ][ !!! *25* !!! ]]
+  [[ signed char*->double ][ 46 ][ 79 ][ 31 ][ !!! *22* !!! ]]
+  [[ signed char*->long double ][ 48 ][ 80 ][ 32 ][ !!! *22* !!! ]]
+  [[ signed char*->array<char, 50> ][ !!! *1* !!! ][ 63 ][ 9 ][ 7 ]]
+  [[ signed char*->string ][ !!! *4* !!! ][ 68 ][ 15 ][ --- ]]
+  [[ signed char*->container::string ][ !!! *<1* !!! ][ 58 ][ 10 ][ --- ]]
+  [[ iterator_range<char*>->char ][ !!! *<1* !!! ][ 54 ][ 6 ][ 4 ]]
+  [[ iterator_range<char*>->signed char ][ !!! *<1* !!! ][ 57 ][ 6 ][ 5 ]]
+  [[ iterator_range<char*>->unsigned char ][ !!! *<1* !!! ][ 54 ][ 6 ][ 5 ]]
+  [[ iterator_range<char*>->int ][ !!! *3* !!! ][ 59 ][ 10 ][ 8 ]]
+  [[ iterator_range<char*>->short ][ !!! *3* !!! ][ 59 ][ 11 ][ 9 ]]
+  [[ iterator_range<char*>->long int ][ !!! *3* !!! ][ 61 ][ 11 ][ 8 ]]
+  [[ iterator_range<char*>->long long ][ !!! *3* !!! ][ 59 ][ 10 ][ 9 ]]
+  [[ iterator_range<char*>->unsigned int ][ !!! *3* !!! ][ 57 ][ 9 ][ 8 ]]
+  [[ iterator_range<char*>->unsigned short ][ !!! *3* !!! ][ 59 ][ 10 ][ 8 ]]
+  [[ iterator_range<char*>->unsigned long int ][ !!! *3* !!! ][ 58 ][ 10 ][ 8 ]]
+  [[ iterator_range<char*>->unsigned long long ][ !!! *3* !!! ][ 58 ][ 15 ][ 8 ]]
+  [[ iterator_range<char*>->float ][ 46 ][ 78 ][ 22 ][ !!! *22* !!! ]]
+  [[ iterator_range<char*>->double ][ 94 ][ 85 ][ !!! *21* !!! ][ 22 ]]
+  [[ iterator_range<char*>->long double ][ 47 ][ 79 ][ 33 ][ !!! *22* !!! ]]
+  [[ iterator_range<char*>->array<char, 50> ][ !!! *1* !!! ][ 102 ][ 25 ][ 16 ]]
+  [[ iterator_range<char*>->string ][ !!! *10* !!! ][ 96 ][ 16 ][ --- ]]
+  [[ iterator_range<char*>->container::string ][ !!! *<1* !!! ][ 64 ][ 11 ][ --- ]]
+  [[ array<char, 50>->char ][ !!! *<1* !!! ][ 75 ][ 4 ][ 4 ]]
+  [[ array<char, 50>->signed char ][ !!! *<1* !!! ][ 54 ][ 6 ][ 13 ]]
+  [[ array<char, 50>->unsigned char ][ !!! *<1* !!! ][ 103 ][ 12 ][ 12 ]]
+  [[ array<char, 50>->int ][ !!! *6* !!! ][ 121 ][ 25 ][ 23 ]]
+  [[ array<char, 50>->short ][ !!! *7* !!! ][ 122 ][ 24 ][ 22 ]]
+  [[ array<char, 50>->long int ][ !!! *7* !!! ][ 119 ][ 24 ][ 22 ]]
+  [[ array<char, 50>->long long ][ !!! *7* !!! ][ 120 ][ 24 ][ 22 ]]
+  [[ array<char, 50>->unsigned int ][ !!! *6* !!! ][ 121 ][ 23 ][ 22 ]]
+  [[ array<char, 50>->unsigned short ][ !!! *6* !!! ][ 121 ][ 23 ][ 22 ]]
+  [[ array<char, 50>->unsigned long int ][ !!! *6* !!! ][ 118 ][ 24 ][ 20 ]]
+  [[ array<char, 50>->unsigned long long ][ !!! *6* !!! ][ 109 ][ 22 ][ 21 ]]
+  [[ array<char, 50>->float ][ 93 ][ 150 ][ 61 ][ !!! *43* !!! ]]
+  [[ array<char, 50>->double ][ 89 ][ 147 ][ 61 ][ !!! *43* !!! ]]
+  [[ array<char, 50>->long double ][ 91 ][ 148 ][ 61 ][ !!! *42* !!! ]]
+  [[ array<char, 50>->array<char, 50> ][ !!! *2* !!! ][ 106 ][ 21 ][ 15 ]]
+  [[ array<char, 50>->string ][ !!! *10* !!! ][ 124 ][ 32 ][ --- ]]
+  [[ array<char, 50>->container::string ][ !!! *1* !!! ][ 109 ][ 23 ][ --- ]]
+  [[ int->int ][ !!! *<1* !!! ][ 114 ][ 26 ][ --- ]]
+  [[ float->double ][ !!! *<1* !!! ][ 207 ][ 105 ][ --- ]]
+  [[ char->signed char ][ !!! *<1* !!! ][ 97 ][ 10 ][ --- ]]
+]
+[endsect]
+
+[section Clang version 3.6.0 (tags/RELEASE_360/final)]
+[table:id Performance Table ( Clang version 3.6.0 (tags/RELEASE_360/final))
+[[From->To] [lexical_cast] [std::stringstream with construction] [std::stringstream without construction][scanf/printf]]
+  [[ string->char ][ !!! *<1* !!! ][ 79 ][ 4 ][ 4 ]]
+  [[ string->signed char ][ !!! *<1* !!! ][ 51 ][ 4 ][ 5 ]]
+  [[ string->unsigned char ][ !!! *<1* !!! ][ 51 ][ 4 ][ 5 ]]
+  [[ string->int ][ !!! *3* !!! ][ 80 ][ 22 ][ 22 ]]
+  [[ string->short ][ !!! *6* !!! ][ 108 ][ 22 ][ 22 ]]
+  [[ string->long int ][ !!! *6* !!! ][ 66 ][ 10 ][ 11 ]]
+  [[ string->long long ][ !!! *6* !!! ][ 101 ][ 9 ][ 20 ]]
+  [[ string->unsigned int ][ !!! *5* !!! ][ 77 ][ 8 ][ 8 ]]
+  [[ string->unsigned short ][ !!! *3* !!! ][ 61 ][ 8 ][ 8 ]]
+  [[ string->unsigned long int ][ !!! *5* !!! ][ 87 ][ 9 ][ 9 ]]
+  [[ string->unsigned long long ][ !!! *3* !!! ][ 89 ][ 9 ][ 8 ]]
+  [[ string->float ][ 52 ][ 114 ][ 38 ][ !!! *22* !!! ]]
+  [[ string->double ][ 49 ][ 79 ][ 32 ][ !!! *22* !!! ]]
+  [[ string->long double ][ 83 ][ 160 ][ 65 ][ !!! *47* !!! ]]
+  [[ string->array<char, 50> ][ !!! *<1* !!! ][ 114 ][ 21 ][ 16 ]]
+  [[ string->string ][ !!! *2* !!! ][ 78 ][ 34 ][ --- ]]
+  [[ string->container::string ][ !!! *1* !!! ][ 100 ][ 11 ][ --- ]]
+  [[ string->char ][ !!! *4* !!! ][ 60 ][ 16 ][ 7 ]]
+  [[ string->signed char ][ !!! *5* !!! ][ 70 ][ 30 ][ 30 ]]
+  [[ string->unsigned char ][ !!! *10* !!! ][ 119 ][ 31 ][ 30 ]]
+  [[ int->string ][ !!! *17* !!! ][ 140 ][ 38 ][ 28 ]]
+  [[ short->string ][ !!! *17* !!! ][ 139 ][ 38 ][ 29 ]]
+  [[ long int->string ][ !!! *17* !!! ][ 139 ][ 37 ][ 29 ]]
+  [[ long long->string ][ !!! *18* !!! ][ 138 ][ 37 ][ 30 ]]
+  [[ unsigned int->string ][ !!! *17* !!! ][ 138 ][ 37 ][ 29 ]]
+  [[ unsigned short->string ][ !!! *17* !!! ][ 139 ][ 38 ][ 29 ]]
+  [[ unsigned long int->string ][ !!! *17* !!! ][ 142 ][ 37 ][ 29 ]]
+  [[ unsigned long long->string ][ !!! *8* !!! ][ 71 ][ 16 ][ 28 ]]
+  [[ float->string ][ 68 ][ 97 ][ 42 ][ !!! *38* !!! ]]
+  [[ double->string ][ 68 ][ 134 ][ 43 ][ !!! *25* !!! ]]
+  [[ long double->string ][ 72 ][ 164 ][ 91 ][ !!! *55* !!! ]]
+  [[ char*->char ][ !!! *<1* !!! ][ 76 ][ 4 ][ 5 ]]
+  [[ char*->signed char ][ !!! *<1* !!! ][ 54 ][ 5 ][ 5 ]]
+  [[ char*->unsigned char ][ !!! *<1* !!! ][ 55 ][ 4 ][ 5 ]]
+  [[ char*->int ][ !!! *3* !!! ][ 60 ][ 10 ][ 8 ]]
+  [[ char*->short ][ !!! *3* !!! ][ 61 ][ 9 ][ 8 ]]
+  [[ char*->long int ][ !!! *4* !!! ][ 61 ][ 9 ][ 8 ]]
+  [[ char*->long long ][ !!! *3* !!! ][ 60 ][ 9 ][ 8 ]]
+  [[ char*->unsigned int ][ !!! *3* !!! ][ 59 ][ 8 ][ 9 ]]
+  [[ char*->unsigned short ][ !!! *3* !!! ][ 59 ][ 10 ][ 8 ]]
+  [[ char*->unsigned long int ][ !!! *3* !!! ][ 59 ][ 10 ][ 8 ]]
+  [[ char*->unsigned long long ][ !!! *3* !!! ][ 59 ][ 10 ][ 8 ]]
+  [[ char*->float ][ 48 ][ 80 ][ 32 ][ !!! *25* !!! ]]
+  [[ char*->double ][ 48 ][ 81 ][ 32 ][ !!! *22* !!! ]]
+  [[ char*->long double ][ 48 ][ 90 ][ 31 ][ !!! *22* !!! ]]
+  [[ char*->array<char, 50> ][ !!! *<1* !!! ][ 59 ][ 9 ][ 7 ]]
+  [[ char*->string ][ !!! *4* !!! ][ 77 ][ 15 ][ --- ]]
+  [[ char*->container::string ][ !!! *1* !!! ][ 62 ][ 12 ][ --- ]]
+  [[ unsigned char*->char ][ !!! *<1* !!! ][ 54 ][ 4 ][ 5 ]]
+  [[ unsigned char*->signed char ][ !!! *<1* !!! ][ 53 ][ 4 ][ 5 ]]
+  [[ unsigned char*->unsigned char ][ !!! *<1* !!! ][ 57 ][ 4 ][ 5 ]]
+  [[ unsigned char*->int ][ !!! *3* !!! ][ 63 ][ 24 ][ 24 ]]
+  [[ unsigned char*->short ][ !!! *5* !!! ][ 65 ][ 9 ][ 9 ]]
+  [[ unsigned char*->long int ][ !!! *3* !!! ][ 60 ][ 10 ][ 8 ]]
+  [[ unsigned char*->long long ][ !!! *4* !!! ][ 67 ][ 23 ][ 23 ]]
+  [[ unsigned char*->unsigned int ][ !!! *5* !!! ][ 116 ][ 23 ][ 22 ]]
+  [[ unsigned char*->unsigned short ][ !!! *5* !!! ][ 114 ][ 22 ][ 22 ]]
+  [[ unsigned char*->unsigned long int ][ !!! *6* !!! ][ 118 ][ 23 ][ 22 ]]
+  [[ unsigned char*->unsigned long long ][ !!! *6* !!! ][ 116 ][ 23 ][ 22 ]]
+  [[ unsigned char*->float ][ 93 ][ 160 ][ 66 ][ !!! *47* !!! ]]
+  [[ unsigned char*->double ][ 93 ][ 158 ][ 64 ][ !!! *46* !!! ]]
+  [[ unsigned char*->long double ][ 93 ][ 158 ][ 64 ][ !!! *46* !!! ]]
+  [[ unsigned char*->array<char, 50> ][ !!! *<1* !!! ][ 112 ][ 21 ][ 17 ]]
+  [[ unsigned char*->string ][ !!! *10* !!! ][ 136 ][ 33 ][ --- ]]
+  [[ unsigned char*->container::string ][ !!! *<1* !!! ][ 117 ][ 26 ][ --- ]]
+  [[ signed char*->char ][ !!! *<1* !!! ][ 102 ][ 11 ][ 10 ]]
+  [[ signed char*->signed char ][ !!! *<1* !!! ][ 102 ][ 11 ][ 12 ]]
+  [[ signed char*->unsigned char ][ !!! *<1* !!! ][ 102 ][ 11 ][ 12 ]]
+  [[ signed char*->int ][ !!! *5* !!! ][ 119 ][ 23 ][ 22 ]]
+  [[ signed char*->short ][ !!! *5* !!! ][ 116 ][ 23 ][ 22 ]]
+  [[ signed char*->long int ][ !!! *6* !!! ][ 116 ][ 23 ][ 22 ]]
+  [[ signed char*->long long ][ !!! *6* !!! ][ 115 ][ 23 ][ 22 ]]
+  [[ signed char*->unsigned int ][ !!! *5* !!! ][ 116 ][ 23 ][ 22 ]]
+  [[ signed char*->unsigned short ][ !!! *5* !!! ][ 114 ][ 22 ][ 22 ]]
+  [[ signed char*->unsigned long int ][ !!! *6* !!! ][ 92 ][ 9 ][ 8 ]]
+  [[ signed char*->unsigned long long ][ !!! *3* !!! ][ 60 ][ 9 ][ 10 ]]
+  [[ signed char*->float ][ 94 ][ 134 ][ 51 ][ !!! *28* !!! ]]
+  [[ signed char*->double ][ 47 ][ 80 ][ 31 ][ !!! *22* !!! ]]
+  [[ signed char*->long double ][ 90 ][ 115 ][ 64 ][ !!! *25* !!! ]]
+  [[ signed char*->array<char, 50> ][ !!! *<1* !!! ][ 97 ][ 22 ][ 17 ]]
+  [[ signed char*->string ][ !!! *11* !!! ][ 139 ][ 34 ][ --- ]]
+  [[ signed char*->container::string ][ !!! *<1* !!! ][ 118 ][ 26 ][ --- ]]
+  [[ iterator_range<char*>->char ][ !!! *<1* !!! ][ 106 ][ 15 ][ 10 ]]
+  [[ iterator_range<char*>->signed char ][ !!! *<1* !!! ][ 107 ][ 15 ][ 13 ]]
+  [[ iterator_range<char*>->unsigned char ][ !!! *<1* !!! ][ 107 ][ 15 ][ 12 ]]
+  [[ iterator_range<char*>->int ][ !!! *5* !!! ][ 117 ][ 25 ][ 22 ]]
+  [[ iterator_range<char*>->short ][ !!! *5* !!! ][ 116 ][ 25 ][ 22 ]]
+  [[ iterator_range<char*>->long int ][ !!! *6* !!! ][ 114 ][ 22 ][ 20 ]]
+  [[ iterator_range<char*>->long long ][ !!! *5* !!! ][ 106 ][ 23 ][ 22 ]]
+  [[ iterator_range<char*>->unsigned int ][ !!! *5* !!! ][ 104 ][ 21 ][ 20 ]]
+  [[ iterator_range<char*>->unsigned short ][ !!! *5* !!! ][ 105 ][ 22 ][ 20 ]]
+  [[ iterator_range<char*>->unsigned long int ][ !!! *5* !!! ][ 106 ][ 22 ][ 20 ]]
+  [[ iterator_range<char*>->unsigned long long ][ !!! *5* !!! ][ 105 ][ 23 ][ 20 ]]
+  [[ iterator_range<char*>->float ][ 89 ][ 140 ][ !!! *42* !!! ][ 43 ]]
+  [[ iterator_range<char*>->double ][ 88 ][ 127 ][ 43 ][ !!! *43* !!! ]]
+  [[ iterator_range<char*>->long double ][ 88 ][ 127 ][ 43 ][ !!! *43* !!! ]]
+  [[ iterator_range<char*>->array<char, 50> ][ !!! *<1* !!! ][ 104 ][ 22 ][ 15 ]]
+  [[ iterator_range<char*>->string ][ !!! *9* !!! ][ 122 ][ 32 ][ --- ]]
+  [[ iterator_range<char*>->container::string ][ !!! *<1* !!! ][ 105 ][ 24 ][ --- ]]
+  [[ array<char, 50>->char ][ !!! *<1* !!! ][ 68 ][ 4 ][ 4 ]]
+  [[ array<char, 50>->signed char ][ !!! *<1* !!! ][ 47 ][ 4 ][ 5 ]]
+  [[ array<char, 50>->unsigned char ][ !!! *<1* !!! ][ 48 ][ 4 ][ 5 ]]
+  [[ array<char, 50>->int ][ !!! *3* !!! ][ 53 ][ 9 ][ 8 ]]
+  [[ array<char, 50>->short ][ !!! *3* !!! ][ 54 ][ 9 ][ 8 ]]
+  [[ array<char, 50>->long int ][ !!! *3* !!! ][ 54 ][ 8 ][ 7 ]]
+  [[ array<char, 50>->long long ][ !!! *3* !!! ][ 53 ][ 8 ][ 8 ]]
+  [[ array<char, 50>->unsigned int ][ !!! *3* !!! ][ 52 ][ 7 ][ 8 ]]
+  [[ array<char, 50>->unsigned short ][ !!! *3* !!! ][ 53 ][ 8 ][ 7 ]]
+  [[ array<char, 50>->unsigned long int ][ !!! *3* !!! ][ 53 ][ 8 ][ 8 ]]
+  [[ array<char, 50>->unsigned long long ][ !!! *3* !!! ][ 53 ][ 9 ][ 8 ]]
+  [[ array<char, 50>->float ][ 43 ][ 72 ][ 29 ][ !!! *20* !!! ]]
+  [[ array<char, 50>->double ][ 42 ][ 72 ][ 28 ][ !!! *20* !!! ]]
+  [[ array<char, 50>->long double ][ 43 ][ 72 ][ 28 ][ !!! *20* !!! ]]
+  [[ array<char, 50>->array<char, 50> ][ !!! *<1* !!! ][ 53 ][ 8 ][ 6 ]]
+  [[ array<char, 50>->string ][ !!! *4* !!! ][ 62 ][ 13 ][ --- ]]
+  [[ array<char, 50>->container::string ][ !!! *1* !!! ][ 54 ][ 10 ][ --- ]]
+  [[ int->int ][ !!! *<1* !!! ][ 57 ][ 10 ][ --- ]]
+  [[ float->double ][ !!! *<1* !!! ][ 102 ][ 49 ][ --- ]]
+  [[ char->signed char ][ !!! *<1* !!! ][ 49 ][ 3 ][ --- ]]
+]
+[endsect]
+
+
+
+[/ END of section, generated by performance measuring program ]
+[endsect]
+
