Optimizations for std::basic_string_view ans boost::basic_string_view (ref https://github.com/boostorg/lexical_cast/issues/30) (#70)

This commit is contained in:
Antony Polukhin
2024-01-26 20:16:50 +03:00
committed by GitHub
parent f0862bb60d
commit 31e0fcde67
6 changed files with 515 additions and 428 deletions
+404 -402
View File
@@ -241,6 +241,7 @@ limitation of compiler options that you use.
* C++ Standard Library based streams now constructed in less cases leading to [*better performance];
* less template instantiations and simpler maintainance;
* support for `volatile` input types was dropped, following the C++ Standard Library trend.
* Optimized formatting for std::basic_string_view and boost::basic_string_view
* [*boost 1.84.0 :]
@@ -369,426 +370,426 @@ Do not use this results to compare compilers, because tests were taken on differ
[section GNU C++ version 9.4.0]
[table:id Performance Table ( GNU C++ version 9.4.0)
[[From->To] [lexical_cast] [std::stringstream with construction] [std::stringstream without construction][scanf/printf]]
[[ string->char ][ !!! *<1* !!! ][ 58 ][ 5 ][ 5 ]]
[[ string->signed char ][ !!! *<1* !!! ][ 52 ][ 5 ][ 7 ]]
[[ string->unsigned char ][ !!! *<1* !!! ][ 54 ][ 5 ][ 6 ]]
[[ string->int ][ !!! *3* !!! ][ 66 ][ 11 ][ 10 ]]
[[ string->short ][ !!! *3* !!! ][ 68 ][ 12 ][ 10 ]]
[[ string->long int ][ !!! *3* !!! ][ 63 ][ 12 ][ 10 ]]
[[ string->long long ][ !!! *3* !!! ][ 61 ][ 11 ][ 10 ]]
[[ string->unsigned int ][ !!! *3* !!! ][ 57 ][ 10 ][ 10 ]]
[[ string->unsigned short ][ !!! *3* !!! ][ 57 ][ 13 ][ 10 ]]
[[ string->unsigned long int ][ !!! *3* !!! ][ 116 ][ 29 ][ 25 ]]
[[ string->unsigned long long ][ !!! *8* !!! ][ 89 ][ 11 ][ 10 ]]
[[ string->float ][ 60 ][ 93 ][ 36 ][ !!! *21* !!! ]]
[[ string->double ][ 63 ][ 92 ][ 34 ][ !!! *21* !!! ]]
[[ string->long double ][ 56 ][ 84 ][ 31 ][ !!! *23* !!! ]]
[[ string->array<char, 50> ][ !!! *<1* !!! ][ 62 ][ 11 ][ 8 ]]
[[ string->string ][ !!! *1* !!! ][ 61 ][ 14 ][ --- ]]
[[ string->container::string ][ !!! *<1* !!! ][ 62 ][ 12 ][ --- ]]
[[ string->char ][ !!! *1* !!! ][ 56 ][ 11 ][ 7 ]]
[[ string->signed char ][ !!! *1* !!! ][ 57 ][ 10 ][ 10 ]]
[[ string->unsigned char ][ !!! *1* !!! ][ 90 ][ 30 ][ 25 ]]
[[ int->string ][ !!! *9* !!! ][ 154 ][ 35 ][ 24 ]]
[[ short->string ][ !!! *9* !!! ][ 166 ][ 32 ][ 25 ]]
[[ long int->string ][ !!! *9* !!! ][ 157 ][ 32 ][ 24 ]]
[[ long long->string ][ !!! *9* !!! ][ 161 ][ 32 ][ 25 ]]
[[ unsigned int->string ][ !!! *9* !!! ][ 151 ][ 34 ][ 24 ]]
[[ unsigned short->string ][ !!! *9* !!! ][ 157 ][ 36 ][ 26 ]]
[[ unsigned long int->string ][ !!! *10* !!! ][ 152 ][ 38 ][ 26 ]]
[[ unsigned long long->string ][ !!! *9* !!! ][ 163 ][ 35 ][ 26 ]]
[[ float->string ][ 66 ][ 268 ][ 114 ][ !!! *58* !!! ]]
[[ double->string ][ 81 ][ 261 ][ 118 ][ !!! *58* !!! ]]
[[ long double->string ][ 107 ][ 277 ][ 135 ][ !!! *63* !!! ]]
[[ char*->char ][ !!! *<1* !!! ][ 129 ][ 15 ][ 13 ]]
[[ char*->signed char ][ !!! *1* !!! ][ 137 ][ 15 ][ 17 ]]
[[ char*->unsigned char ][ !!! *1* !!! ][ 137 ][ 15 ][ 17 ]]
[[ char*->int ][ !!! *9* !!! ][ 160 ][ 31 ][ 25 ]]
[[ char*->short ][ !!! *9* !!! ][ 155 ][ 31 ][ 26 ]]
[[ char*->long int ][ !!! *9* !!! ][ 166 ][ 31 ][ 25 ]]
[[ char*->long long ][ !!! *9* !!! ][ 161 ][ 30 ][ 25 ]]
[[ char*->unsigned int ][ !!! *9* !!! ][ 148 ][ 28 ][ 25 ]]
[[ char*->unsigned short ][ !!! *8* !!! ][ 160 ][ 27 ][ 25 ]]
[[ char*->unsigned long int ][ !!! *8* !!! ][ 158 ][ 30 ][ 26 ]]
[[ char*->unsigned long long ][ !!! *8* !!! ][ 148 ][ 29 ][ 25 ]]
[[ char*->float ][ 129 ][ 224 ][ 87 ][ !!! *52* !!! ]]
[[ char*->double ][ 138 ][ 220 ][ 88 ][ !!! *54* !!! ]]
[[ char*->long double ][ 126 ][ 202 ][ 78 ][ !!! *56* !!! ]]
[[ char*->array<char, 50> ][ !!! *2* !!! ][ 158 ][ 28 ][ 21 ]]
[[ char*->string ][ !!! *3* !!! ][ 158 ][ 30 ][ --- ]]
[[ char*->container::string ][ !!! *2* !!! ][ 161 ][ 33 ][ --- ]]
[[ unsigned char*->char ][ !!! *<1* !!! ][ 110 ][ 6 ][ 5 ]]
[[ unsigned char*->signed char ][ !!! *<1* !!! ][ 55 ][ 6 ][ 7 ]]
[[ unsigned char*->unsigned char ][ !!! *<1* !!! ][ 57 ][ 5 ][ 7 ]]
[[ unsigned char*->int ][ !!! *3* !!! ][ 68 ][ 12 ][ 10 ]]
[[ unsigned char*->short ][ !!! *3* !!! ][ 67 ][ 12 ][ 10 ]]
[[ unsigned char*->long int ][ !!! *3* !!! ][ 65 ][ 12 ][ 10 ]]
[[ unsigned char*->long long ][ !!! *3* !!! ][ 70 ][ 12 ][ 10 ]]
[[ string->char ][ !!! *<1* !!! ][ 60 ][ 5 ][ 5 ]]
[[ string->signed char ][ !!! *<1* !!! ][ 53 ][ 5 ][ 7 ]]
[[ string->unsigned char ][ !!! *<1* !!! ][ 56 ][ 5 ][ 6 ]]
[[ string->int ][ !!! *3* !!! ][ 65 ][ 12 ][ 10 ]]
[[ string->short ][ !!! *3* !!! ][ 66 ][ 12 ][ 10 ]]
[[ string->long int ][ !!! *3* !!! ][ 65 ][ 12 ][ 10 ]]
[[ string->long long ][ !!! *3* !!! ][ 61 ][ 12 ][ 10 ]]
[[ string->unsigned int ][ !!! *3* !!! ][ 60 ][ 10 ][ 10 ]]
[[ string->unsigned short ][ !!! *3* !!! ][ 60 ][ 10 ][ 10 ]]
[[ string->unsigned long int ][ !!! *3* !!! ][ 58 ][ 11 ][ 10 ]]
[[ string->unsigned long long ][ !!! *3* !!! ][ 67 ][ 15 ][ 10 ]]
[[ string->float ][ 51 ][ 87 ][ 36 ][ !!! *21* !!! ]]
[[ string->double ][ 127 ][ 142 ][ 34 ][ !!! *21* !!! ]]
[[ string->long double ][ 50 ][ 88 ][ 32 ][ !!! *24* !!! ]]
[[ string->array<char, 50> ][ !!! *<1* !!! ][ 58 ][ 10 ][ 8 ]]
[[ string->string ][ !!! *1* !!! ][ 56 ][ 12 ][ --- ]]
[[ string->container::string ][ !!! *<1* !!! ][ 59 ][ 11 ][ --- ]]
[[ string->char ][ !!! *1* !!! ][ 59 ][ 10 ][ 7 ]]
[[ string->signed char ][ !!! *1* !!! ][ 60 ][ 10 ][ 10 ]]
[[ string->unsigned char ][ !!! *1* !!! ][ 63 ][ 10 ][ 10 ]]
[[ int->string ][ !!! *4* !!! ][ 65 ][ 13 ][ 10 ]]
[[ short->string ][ !!! *4* !!! ][ 71 ][ 14 ][ 10 ]]
[[ long int->string ][ !!! *4* !!! ][ 64 ][ 13 ][ 10 ]]
[[ long long->string ][ !!! *4* !!! ][ 63 ][ 13 ][ 10 ]]
[[ unsigned int->string ][ !!! *4* !!! ][ 65 ][ 15 ][ 10 ]]
[[ unsigned short->string ][ !!! *4* !!! ][ 62 ][ 15 ][ 10 ]]
[[ unsigned long int->string ][ !!! *4* !!! ][ 75 ][ 14 ][ 10 ]]
[[ unsigned long long->string ][ !!! *4* !!! ][ 64 ][ 14 ][ 11 ]]
[[ float->string ][ 26 ][ 112 ][ 49 ][ !!! *23* !!! ]]
[[ double->string ][ !!! *33* !!! ][ 106 ][ 91 ][ 58 ]]
[[ long double->string ][ 105 ][ 276 ][ 133 ][ !!! *66* !!! ]]
[[ char*->char ][ !!! *1* !!! ][ 136 ][ 16 ][ 13 ]]
[[ char*->signed char ][ !!! *<1* !!! ][ 133 ][ 15 ][ 17 ]]
[[ char*->unsigned char ][ !!! *<1* !!! ][ 138 ][ 16 ][ 17 ]]
[[ char*->int ][ !!! *9* !!! ][ 152 ][ 34 ][ 25 ]]
[[ char*->short ][ !!! *9* !!! ][ 150 ][ 32 ][ 26 ]]
[[ char*->long int ][ !!! *9* !!! ][ 159 ][ 33 ][ 25 ]]
[[ char*->long long ][ !!! *9* !!! ][ 157 ][ 31 ][ 26 ]]
[[ char*->unsigned int ][ !!! *8* !!! ][ 149 ][ 27 ][ 26 ]]
[[ char*->unsigned short ][ !!! *8* !!! ][ 140 ][ 27 ][ 25 ]]
[[ char*->unsigned long int ][ !!! *8* !!! ][ 150 ][ 29 ][ 25 ]]
[[ char*->unsigned long long ][ !!! *8* !!! ][ 156 ][ 31 ][ 25 ]]
[[ char*->float ][ 134 ][ 233 ][ 89 ][ !!! *52* !!! ]]
[[ char*->double ][ 130 ][ 224 ][ 78 ][ !!! *53* !!! ]]
[[ char*->long double ][ 65 ][ 83 ][ 35 ][ !!! *23* !!! ]]
[[ char*->array<char, 50> ][ !!! *1* !!! ][ 60 ][ 11 ][ 8 ]]
[[ char*->string ][ !!! *1* !!! ][ 61 ][ 12 ][ --- ]]
[[ char*->container::string ][ !!! *1* !!! ][ 62 ][ 12 ][ --- ]]
[[ unsigned char*->char ][ !!! *<1* !!! ][ 53 ][ 6 ][ 5 ]]
[[ unsigned char*->signed char ][ !!! *<1* !!! ][ 53 ][ 7 ][ 7 ]]
[[ unsigned char*->unsigned char ][ !!! *<1* !!! ][ 56 ][ 6 ][ 7 ]]
[[ unsigned char*->int ][ !!! *3* !!! ][ 62 ][ 13 ][ 10 ]]
[[ unsigned char*->short ][ !!! *3* !!! ][ 62 ][ 12 ][ 10 ]]
[[ unsigned char*->long int ][ !!! *3* !!! ][ 66 ][ 12 ][ 10 ]]
[[ unsigned char*->long long ][ !!! *3* !!! ][ 65 ][ 12 ][ 10 ]]
[[ unsigned char*->unsigned int ][ !!! *3* !!! ][ 61 ][ 11 ][ 10 ]]
[[ unsigned char*->unsigned short ][ !!! *3* !!! ][ 60 ][ 11 ][ 10 ]]
[[ unsigned char*->unsigned long int ][ !!! *3* !!! ][ 61 ][ 12 ][ 10 ]]
[[ unsigned char*->unsigned long long ][ !!! *3* !!! ][ 65 ][ 12 ][ 10 ]]
[[ unsigned char*->float ][ 56 ][ 96 ][ 34 ][ !!! *21* !!! ]]
[[ unsigned char*->double ][ 56 ][ 88 ][ 36 ][ !!! *21* !!! ]]
[[ unsigned char*->long double ][ 49 ][ 90 ][ 31 ][ !!! *23* !!! ]]
[[ unsigned char*->array<char, 50> ][ !!! *1* !!! ][ 63 ][ 12 ][ 8 ]]
[[ unsigned char*->unsigned short ][ !!! *3* !!! ][ 57 ][ 11 ][ 10 ]]
[[ unsigned char*->unsigned long int ][ !!! *3* !!! ][ 59 ][ 12 ][ 10 ]]
[[ unsigned char*->unsigned long long ][ !!! *3* !!! ][ 62 ][ 12 ][ 10 ]]
[[ unsigned char*->float ][ 54 ][ 93 ][ 36 ][ !!! *21* !!! ]]
[[ unsigned char*->double ][ 52 ][ 89 ][ 31 ][ !!! *21* !!! ]]
[[ unsigned char*->long double ][ 51 ][ 87 ][ 32 ][ !!! *24* !!! ]]
[[ unsigned char*->array<char, 50> ][ !!! *1* !!! ][ 60 ][ 12 ][ 8 ]]
[[ unsigned char*->string ][ !!! *1* !!! ][ 69 ][ 13 ][ --- ]]
[[ unsigned char*->container::string ][ !!! *<1* !!! ][ 66 ][ 12 ][ --- ]]
[[ signed char*->char ][ !!! *<1* !!! ][ 55 ][ 5 ][ 5 ]]
[[ signed char*->signed char ][ !!! *<1* !!! ][ 54 ][ 5 ][ 7 ]]
[[ signed char*->unsigned char ][ !!! *<1* !!! ][ 54 ][ 6 ][ 7 ]]
[[ signed char*->int ][ !!! *3* !!! ][ 69 ][ 12 ][ 10 ]]
[[ signed char*->short ][ !!! *3* !!! ][ 62 ][ 13 ][ 10 ]]
[[ signed char*->long int ][ !!! *3* !!! ][ 69 ][ 12 ][ 10 ]]
[[ signed char*->long long ][ !!! *3* !!! ][ 64 ][ 12 ][ 10 ]]
[[ signed char*->unsigned int ][ !!! *3* !!! ][ 61 ][ 12 ][ 10 ]]
[[ signed char*->unsigned short ][ !!! *3* !!! ][ 66 ][ 12 ][ 10 ]]
[[ signed char*->unsigned long int ][ !!! *3* !!! ][ 64 ][ 12 ][ 10 ]]
[[ signed char*->unsigned long long ][ !!! *3* !!! ][ 64 ][ 12 ][ 10 ]]
[[ signed char*->float ][ 56 ][ 93 ][ 33 ][ !!! *21* !!! ]]
[[ signed char*->double ][ 55 ][ 195 ][ 86 ][ !!! *53* !!! ]]
[[ signed char*->long double ][ 126 ][ 208 ][ 74 ][ !!! *57* !!! ]]
[[ signed char*->array<char, 50> ][ !!! *2* !!! ][ 153 ][ 27 ][ 21 ]]
[[ signed char*->string ][ !!! *3* !!! ][ 156 ][ 30 ][ --- ]]
[[ signed char*->container::string ][ !!! *2* !!! ][ 160 ][ 33 ][ --- ]]
[[ iterator_range<char*>->char ][ !!! *<1* !!! ][ 132 ][ 14 ][ 14 ]]
[[ iterator_range<char*>->signed char ][ !!! *<1* !!! ][ 134 ][ 13 ][ 17 ]]
[[ iterator_range<char*>->unsigned char ][ !!! *<1* !!! ][ 137 ][ 14 ][ 17 ]]
[[ iterator_range<char*>->int ][ !!! *9* !!! ][ 167 ][ 39 ][ 25 ]]
[[ iterator_range<char*>->short ][ !!! *9* !!! ][ 175 ][ 38 ][ 26 ]]
[[ iterator_range<char*>->long int ][ !!! *9* !!! ][ 171 ][ 40 ][ 25 ]]
[[ iterator_range<char*>->long long ][ !!! *9* !!! ][ 173 ][ 38 ][ 25 ]]
[[ iterator_range<char*>->unsigned int ][ !!! *8* !!! ][ 153 ][ 36 ][ 25 ]]
[[ iterator_range<char*>->unsigned short ][ !!! *8* !!! ][ 151 ][ 35 ][ 25 ]]
[[ iterator_range<char*>->unsigned long int ][ !!! *9* !!! ][ 161 ][ 37 ][ 27 ]]
[[ iterator_range<char*>->unsigned long long ][ !!! *9* !!! ][ 164 ][ 37 ][ 26 ]]
[[ iterator_range<char*>->float ][ 138 ][ 249 ][ 110 ][ !!! *53* !!! ]]
[[ iterator_range<char*>->double ][ 136 ][ 244 ][ 101 ][ !!! *54* !!! ]]
[[ iterator_range<char*>->long double ][ 126 ][ 232 ][ 97 ][ !!! *56* !!! ]]
[[ iterator_range<char*>->array<char, 50> ][ !!! *1* !!! ][ 170 ][ 47 ][ 21 ]]
[[ iterator_range<char*>->string ][ !!! *2* !!! ][ 170 ][ 55 ][ --- ]]
[[ iterator_range<char*>->container::string ][ !!! *1* !!! ][ 154 ][ 21 ][ --- ]]
[[ std::string_view->char ][ 21 ][ 53 ][ 5 ][ !!! *5* !!! ]]
[[ std::string_view->signed char ][ 22 ][ 53 ][ !!! *5* !!! ][ 7 ]]
[[ std::string_view->unsigned char ][ 21 ][ 55 ][ 7 ][ !!! *7* !!! ]]
[[ std::string_view->int ][ 28 ][ 66 ][ 12 ][ !!! *10* !!! ]]
[[ std::string_view->short ][ 26 ][ 63 ][ 12 ][ !!! *10* !!! ]]
[[ std::string_view->long int ][ 32 ][ 67 ][ 11 ][ !!! *10* !!! ]]
[[ std::string_view->long long ][ 29 ][ 65 ][ 11 ][ !!! *10* !!! ]]
[[ std::string_view->unsigned int ][ 27 ][ 58 ][ !!! *10* !!! ][ 25 ]]
[[ std::string_view->unsigned short ][ 64 ][ 126 ][ 11 ][ !!! *10* !!! ]]
[[ std::string_view->unsigned long int ][ 28 ][ 59 ][ !!! *11* !!! ][ 13 ]]
[[ std::string_view->unsigned long long ][ 30 ][ 65 ][ 11 ][ !!! *10* !!! ]]
[[ std::string_view->float ][ 82 ][ 93 ][ 37 ][ !!! *21* !!! ]]
[[ std::string_view->double ][ 81 ][ 90 ][ 33 ][ !!! *21* !!! ]]
[[ std::string_view->long double ][ 79 ][ 86 ][ 32 ][ !!! *23* !!! ]]
[[ std::string_view->array<char, 50> ][ 23 ][ 62 ][ 10 ][ !!! *8* !!! ]]
[[ std::string_view->string ][ 24 ][ 62 ][ !!! *12* !!! ][ --- ]]
[[ std::string_view->container::string ][ 24 ][ 66 ][ !!! *11* !!! ][ --- ]]
[[ unsigned char*->container::string ][ !!! *1* !!! ][ 65 ][ 12 ][ --- ]]
[[ signed char*->char ][ !!! *<1* !!! ][ 59 ][ 6 ][ 5 ]]
[[ signed char*->signed char ][ !!! *<1* !!! ][ 54 ][ 6 ][ 6 ]]
[[ signed char*->unsigned char ][ !!! *<1* !!! ][ 59 ][ 6 ][ 7 ]]
[[ signed char*->int ][ !!! *3* !!! ][ 66 ][ 12 ][ 10 ]]
[[ signed char*->short ][ !!! *3* !!! ][ 60 ][ 12 ][ 10 ]]
[[ signed char*->long int ][ !!! *3* !!! ][ 60 ][ 14 ][ 10 ]]
[[ signed char*->long long ][ !!! *3* !!! ][ 68 ][ 13 ][ 10 ]]
[[ signed char*->unsigned int ][ !!! *3* !!! ][ 60 ][ 11 ][ 10 ]]
[[ signed char*->unsigned short ][ !!! *3* !!! ][ 66 ][ 11 ][ 10 ]]
[[ signed char*->unsigned long int ][ !!! *3* !!! ][ 65 ][ 12 ][ 10 ]]
[[ signed char*->unsigned long long ][ !!! *3* !!! ][ 67 ][ 12 ][ 10 ]]
[[ signed char*->float ][ 59 ][ 87 ][ 36 ][ !!! *21* !!! ]]
[[ signed char*->double ][ 69 ][ 197 ][ 30 ][ !!! *21* !!! ]]
[[ signed char*->long double ][ 50 ][ 86 ][ 30 ][ !!! *23* !!! ]]
[[ signed char*->array<char, 50> ][ !!! *1* !!! ][ 59 ][ 11 ][ 8 ]]
[[ signed char*->string ][ !!! *1* !!! ][ 63 ][ 13 ][ --- ]]
[[ signed char*->container::string ][ !!! *1* !!! ][ 62 ][ 12 ][ --- ]]
[[ iterator_range<char*>->char ][ !!! *<1* !!! ][ 51 ][ 5 ][ 5 ]]
[[ iterator_range<char*>->signed char ][ !!! *<1* !!! ][ 54 ][ 5 ][ 7 ]]
[[ iterator_range<char*>->unsigned char ][ !!! *<1* !!! ][ 53 ][ 5 ][ 6 ]]
[[ iterator_range<char*>->int ][ !!! *3* !!! ][ 70 ][ 18 ][ 10 ]]
[[ iterator_range<char*>->short ][ !!! *3* !!! ][ 67 ][ 16 ][ 10 ]]
[[ iterator_range<char*>->long int ][ !!! *3* !!! ][ 66 ][ 16 ][ 10 ]]
[[ iterator_range<char*>->long long ][ !!! *3* !!! ][ 63 ][ 17 ][ 10 ]]
[[ iterator_range<char*>->unsigned int ][ !!! *3* !!! ][ 62 ][ 14 ][ 10 ]]
[[ iterator_range<char*>->unsigned short ][ !!! *3* !!! ][ 64 ][ 14 ][ 10 ]]
[[ iterator_range<char*>->unsigned long int ][ !!! *3* !!! ][ 64 ][ 15 ][ 10 ]]
[[ iterator_range<char*>->unsigned long long ][ !!! *3* !!! ][ 68 ][ 15 ][ 10 ]]
[[ iterator_range<char*>->float ][ 56 ][ 97 ][ 44 ][ !!! *21* !!! ]]
[[ iterator_range<char*>->double ][ 54 ][ 95 ][ 40 ][ !!! *21* !!! ]]
[[ iterator_range<char*>->long double ][ 50 ][ 93 ][ 39 ][ !!! *23* !!! ]]
[[ iterator_range<char*>->array<char, 50> ][ !!! *<1* !!! ][ 69 ][ 18 ][ 8 ]]
[[ iterator_range<char*>->string ][ !!! *1* !!! ][ 74 ][ 21 ][ --- ]]
[[ iterator_range<char*>->container::string ][ !!! *<1* !!! ][ 71 ][ 21 ][ --- ]]
[[ std::string_view->char ][ !!! *<1* !!! ][ 55 ][ 5 ][ 5 ]]
[[ std::string_view->signed char ][ !!! *<1* !!! ][ 53 ][ 5 ][ 7 ]]
[[ std::string_view->unsigned char ][ !!! *<1* !!! ][ 54 ][ 5 ][ 7 ]]
[[ std::string_view->int ][ !!! *4* !!! ][ 65 ][ 12 ][ 10 ]]
[[ std::string_view->short ][ !!! *4* !!! ][ 66 ][ 12 ][ 10 ]]
[[ std::string_view->long int ][ !!! *3* !!! ][ 62 ][ 12 ][ 10 ]]
[[ std::string_view->long long ][ !!! *3* !!! ][ 112 ][ 30 ][ 25 ]]
[[ std::string_view->unsigned int ][ !!! *8* !!! ][ 88 ][ 10 ][ 10 ]]
[[ std::string_view->unsigned short ][ !!! *3* !!! ][ 60 ][ 10 ][ 10 ]]
[[ std::string_view->unsigned long int ][ !!! *3* !!! ][ 60 ][ 11 ][ 10 ]]
[[ std::string_view->unsigned long long ][ !!! *3* !!! ][ 62 ][ 11 ][ 10 ]]
[[ std::string_view->float ][ 53 ][ 87 ][ 35 ][ !!! *21* !!! ]]
[[ std::string_view->double ][ 54 ][ 93 ][ 34 ][ !!! *21* !!! ]]
[[ std::string_view->long double ][ 52 ][ 94 ][ 30 ][ !!! *24* !!! ]]
[[ std::string_view->array<char, 50> ][ !!! *1* !!! ][ 64 ][ 11 ][ 8 ]]
[[ std::string_view->string ][ !!! *1* !!! ][ 58 ][ 13 ][ --- ]]
[[ std::string_view->container::string ][ !!! *3* !!! ][ 68 ][ 13 ][ --- ]]
[[ array<char, 50>->char ][ !!! *<1* !!! ][ 52 ][ 5 ][ 5 ]]
[[ array<char, 50>->signed char ][ !!! *<1* !!! ][ 52 ][ 5 ][ 7 ]]
[[ array<char, 50>->unsigned char ][ !!! *<1* !!! ][ 51 ][ 6 ][ 6 ]]
[[ array<char, 50>->int ][ !!! *3* !!! ][ 62 ][ 12 ][ 10 ]]
[[ array<char, 50>->short ][ !!! *3* !!! ][ 68 ][ 12 ][ 10 ]]
[[ array<char, 50>->long int ][ !!! *3* !!! ][ 64 ][ 13 ][ 10 ]]
[[ array<char, 50>->long long ][ !!! *3* !!! ][ 62 ][ 12 ][ 10 ]]
[[ array<char, 50>->unsigned int ][ !!! *3* !!! ][ 59 ][ 12 ][ 10 ]]
[[ array<char, 50>->unsigned short ][ !!! *3* !!! ][ 131 ][ 28 ][ 25 ]]
[[ array<char, 50>->unsigned long int ][ !!! *8* !!! ][ 147 ][ 30 ][ 25 ]]
[[ array<char, 50>->unsigned long long ][ !!! *8* !!! ][ 147 ][ 30 ][ 25 ]]
[[ array<char, 50>->float ][ 134 ][ 227 ][ 88 ][ !!! *52* !!! ]]
[[ array<char, 50>->double ][ 127 ][ 214 ][ 82 ][ !!! *52* !!! ]]
[[ array<char, 50>->long double ][ 126 ][ 212 ][ 74 ][ !!! *57* !!! ]]
[[ array<char, 50>->array<char, 50> ][ !!! *2* !!! ][ 147 ][ 28 ][ 20 ]]
[[ array<char, 50>->string ][ !!! *4* !!! ][ 145 ][ 32 ][ --- ]]
[[ array<char, 50>->container::string ][ !!! *3* !!! ][ 147 ][ 30 ][ --- ]]
[[ int->int ][ !!! *<1* !!! ][ 172 ][ 39 ][ --- ]]
[[ float->double ][ !!! *<1* !!! ][ 325 ][ 182 ][ --- ]]
[[ char->signed char ][ !!! *<1* !!! ][ 127 ][ 13 ][ --- ]]
[[ array<char, 50>->signed char ][ !!! *<1* !!! ][ 57 ][ 6 ][ 7 ]]
[[ array<char, 50>->unsigned char ][ !!! *<1* !!! ][ 53 ][ 6 ][ 6 ]]
[[ array<char, 50>->int ][ !!! *3* !!! ][ 59 ][ 12 ][ 10 ]]
[[ array<char, 50>->short ][ !!! *3* !!! ][ 64 ][ 12 ][ 10 ]]
[[ array<char, 50>->long int ][ !!! *3* !!! ][ 60 ][ 12 ][ 10 ]]
[[ array<char, 50>->long long ][ !!! *3* !!! ][ 62 ][ 13 ][ 10 ]]
[[ array<char, 50>->unsigned int ][ !!! *3* !!! ][ 60 ][ 11 ][ 10 ]]
[[ array<char, 50>->unsigned short ][ !!! *2* !!! ][ 59 ][ 11 ][ 10 ]]
[[ array<char, 50>->unsigned long int ][ !!! *3* !!! ][ 58 ][ 12 ][ 10 ]]
[[ array<char, 50>->unsigned long long ][ !!! *3* !!! ][ 60 ][ 12 ][ 10 ]]
[[ array<char, 50>->float ][ 54 ][ 89 ][ 35 ][ !!! *21* !!! ]]
[[ array<char, 50>->double ][ 51 ][ 86 ][ 34 ][ !!! *23* !!! ]]
[[ array<char, 50>->long double ][ 49 ][ 84 ][ 31 ][ !!! *23* !!! ]]
[[ array<char, 50>->array<char, 50> ][ !!! *<1* !!! ][ 58 ][ 12 ][ 8 ]]
[[ array<char, 50>->string ][ !!! *1* !!! ][ 58 ][ 12 ][ --- ]]
[[ array<char, 50>->container::string ][ !!! *1* !!! ][ 57 ][ 12 ][ --- ]]
[[ int->int ][ !!! *<1* !!! ][ 61 ][ 15 ][ --- ]]
[[ float->double ][ !!! *<1* !!! ][ 133 ][ 74 ][ --- ]]
[[ char->signed char ][ !!! *<1* !!! ][ 55 ][ 6 ][ --- ]]
]
[endsect]
[section Clang version 15.0.7 ]
[table:id Performance Table ( Clang version 15.0.7 )
[[From->To] [lexical_cast] [std::stringstream with construction] [std::stringstream without construction][scanf/printf]]
[[ string->char ][ !!! *<1* !!! ][ 64 ][ 5 ][ 6 ]]
[[ string->signed char ][ !!! *<1* !!! ][ 59 ][ 5 ][ 11 ]]
[[ string->unsigned char ][ !!! *<1* !!! ][ 60 ][ 8 ][ 7 ]]
[[ string->int ][ !!! *3* !!! ][ 66 ][ 12 ][ 15 ]]
[[ string->short ][ !!! *3* !!! ][ 75 ][ 11 ][ 11 ]]
[[ string->long int ][ !!! *3* !!! ][ 68 ][ 14 ][ 13 ]]
[[ string->long long ][ !!! *3* !!! ][ 66 ][ 11 ][ 11 ]]
[[ string->unsigned int ][ !!! *3* !!! ][ 68 ][ 10 ][ 11 ]]
[[ string->unsigned short ][ !!! *3* !!! ][ 79 ][ 10 ][ 12 ]]
[[ string->unsigned long int ][ !!! *3* !!! ][ 68 ][ 11 ][ 11 ]]
[[ string->unsigned long long ][ !!! *3* !!! ][ 66 ][ 11 ][ 11 ]]
[[ string->float ][ 60 ][ 105 ][ 35 ][ !!! *22* !!! ]]
[[ string->double ][ 55 ][ 101 ][ 37 ][ !!! *28* !!! ]]
[[ string->long double ][ 57 ][ 91 ][ 34 ][ !!! *25* !!! ]]
[[ string->array<char, 50> ][ !!! *<1* !!! ][ 72 ][ 10 ][ 9 ]]
[[ string->string ][ !!! *1* !!! ][ 69 ][ 11 ][ --- ]]
[[ string->char ][ !!! *<1* !!! ][ 66 ][ 5 ][ 6 ]]
[[ string->signed char ][ !!! *<1* !!! ][ 57 ][ 5 ][ 7 ]]
[[ string->unsigned char ][ !!! *<1* !!! ][ 59 ][ 5 ][ 7 ]]
[[ string->int ][ !!! *3* !!! ][ 65 ][ 12 ][ 10 ]]
[[ string->short ][ !!! *3* !!! ][ 68 ][ 12 ][ 11 ]]
[[ string->long int ][ !!! *3* !!! ][ 65 ][ 11 ][ 10 ]]
[[ string->long long ][ !!! *3* !!! ][ 68 ][ 11 ][ 11 ]]
[[ string->unsigned int ][ !!! *3* !!! ][ 64 ][ 10 ][ 11 ]]
[[ string->unsigned short ][ !!! *3* !!! ][ 70 ][ 10 ][ 10 ]]
[[ string->unsigned long int ][ !!! *3* !!! ][ 72 ][ 13 ][ 11 ]]
[[ string->unsigned long long ][ !!! *3* !!! ][ 67 ][ 11 ][ 11 ]]
[[ string->float ][ 58 ][ 93 ][ 35 ][ !!! *21* !!! ]]
[[ string->double ][ 56 ][ 94 ][ 30 ][ !!! *23* !!! ]]
[[ string->long double ][ 59 ][ 97 ][ 35 ][ !!! *25* !!! ]]
[[ string->array<char, 50> ][ !!! *<1* !!! ][ 75 ][ 10 ][ 9 ]]
[[ string->string ][ !!! *1* !!! ][ 67 ][ 11 ][ --- ]]
[[ string->container::string ][ !!! *<1* !!! ][ 70 ][ 15 ][ --- ]]
[[ string->char ][ !!! *<1* !!! ][ 66 ][ 10 ][ 1 ]]
[[ string->signed char ][ !!! *<1* !!! ][ 63 ][ 10 ][ 9 ]]
[[ string->unsigned char ][ !!! *<1* !!! ][ 65 ][ 12 ][ 11 ]]
[[ int->string ][ !!! *4* !!! ][ 65 ][ 19 ][ 10 ]]
[[ short->string ][ !!! *4* !!! ][ 73 ][ 13 ][ 9 ]]
[[ long int->string ][ !!! *4* !!! ][ 67 ][ 12 ][ 9 ]]
[[ long long->string ][ !!! *4* !!! ][ 69 ][ 13 ][ 10 ]]
[[ unsigned int->string ][ !!! *4* !!! ][ 64 ][ 14 ][ 9 ]]
[[ unsigned short->string ][ !!! *4* !!! ][ 67 ][ 13 ][ 10 ]]
[[ unsigned long int->string ][ !!! *4* !!! ][ 69 ][ 13 ][ 9 ]]
[[ unsigned long long->string ][ !!! *4* !!! ][ 66 ][ 19 ][ 10 ]]
[[ float->string ][ 28 ][ 111 ][ 46 ][ !!! *22* !!! ]]
[[ double->string ][ 35 ][ 121 ][ 46 ][ !!! *23* !!! ]]
[[ long double->string ][ 44 ][ 127 ][ 49 ][ !!! *25* !!! ]]
[[ char*->char ][ !!! *<1* !!! ][ 62 ][ 5 ][ 6 ]]
[[ char*->signed char ][ !!! *<1* !!! ][ 56 ][ 5 ][ 7 ]]
[[ char*->unsigned char ][ !!! *<1* !!! ][ 55 ][ 5 ][ 7 ]]
[[ char*->int ][ !!! *3* !!! ][ 65 ][ 13 ][ 11 ]]
[[ char*->short ][ !!! *2* !!! ][ 76 ][ 12 ][ 11 ]]
[[ char*->long int ][ !!! *3* !!! ][ 75 ][ 11 ][ 10 ]]
[[ char*->long long ][ !!! *3* !!! ][ 74 ][ 14 ][ 10 ]]
[[ char*->unsigned int ][ !!! *2* !!! ][ 66 ][ 11 ][ 10 ]]
[[ char*->unsigned short ][ !!! *2* !!! ][ 66 ][ 10 ][ 10 ]]
[[ char*->unsigned long int ][ !!! *3* !!! ][ 65 ][ 11 ][ 10 ]]
[[ char*->unsigned long long ][ !!! *3* !!! ][ 64 ][ 11 ][ 10 ]]
[[ char*->float ][ 57 ][ 92 ][ 34 ][ !!! *21* !!! ]]
[[ char*->double ][ 55 ][ 91 ][ 33 ][ !!! *22* !!! ]]
[[ char*->long double ][ 51 ][ 94 ][ 33 ][ !!! *32* !!! ]]
[[ char*->array<char, 50> ][ !!! *<1* !!! ][ 70 ][ 10 ][ 9 ]]
[[ char*->string ][ !!! *1* !!! ][ 68 ][ 11 ][ --- ]]
[[ char*->container::string ][ !!! *1* !!! ][ 65 ][ 15 ][ --- ]]
[[ unsigned char*->char ][ !!! *<1* !!! ][ 58 ][ 5 ][ 6 ]]
[[ unsigned char*->signed char ][ !!! *<1* !!! ][ 59 ][ 5 ][ 7 ]]
[[ unsigned char*->unsigned char ][ !!! *<1* !!! ][ 59 ][ 5 ][ 7 ]]
[[ unsigned char*->int ][ !!! *2* !!! ][ 155 ][ 31 ][ 25 ]]
[[ unsigned char*->short ][ !!! *2* !!! ][ 67 ][ 12 ][ 10 ]]
[[ unsigned char*->long int ][ !!! *3* !!! ][ 69 ][ 11 ][ 10 ]]
[[ unsigned char*->long long ][ !!! *3* !!! ][ 60 ][ 13 ][ 10 ]]
[[ unsigned char*->unsigned int ][ !!! *2* !!! ][ 70 ][ 10 ][ 10 ]]
[[ unsigned char*->unsigned short ][ !!! *2* !!! ][ 64 ][ 10 ][ 10 ]]
[[ unsigned char*->unsigned long int ][ !!! *3* !!! ][ 63 ][ 12 ][ 10 ]]
[[ unsigned char*->unsigned long long ][ !!! *3* !!! ][ 63 ][ 12 ][ 10 ]]
[[ unsigned char*->float ][ 57 ][ 101 ][ 34 ][ !!! *21* !!! ]]
[[ unsigned char*->double ][ 58 ][ 103 ][ 31 ][ !!! *22* !!! ]]
[[ unsigned char*->long double ][ 56 ][ 100 ][ 37 ][ !!! *25* !!! ]]
[[ unsigned char*->array<char, 50> ][ !!! *<1* !!! ][ 71 ][ 12 ][ 9 ]]
[[ unsigned char*->string ][ !!! *1* !!! ][ 70 ][ 11 ][ --- ]]
[[ unsigned char*->container::string ][ !!! *1* !!! ][ 72 ][ 15 ][ --- ]]
[[ signed char*->char ][ !!! *<1* !!! ][ 57 ][ 5 ][ 6 ]]
[[ signed char*->signed char ][ !!! *<1* !!! ][ 66 ][ 5 ][ 7 ]]
[[ signed char*->unsigned char ][ !!! *<1* !!! ][ 54 ][ 5 ][ 7 ]]
[[ signed char*->int ][ !!! *4* !!! ][ 65 ][ 11 ][ 11 ]]
[[ signed char*->short ][ !!! *2* !!! ][ 68 ][ 11 ][ 11 ]]
[[ signed char*->long int ][ !!! *3* !!! ][ 70 ][ 17 ][ 11 ]]
[[ signed char*->long long ][ !!! *3* !!! ][ 76 ][ 16 ][ 11 ]]
[[ signed char*->unsigned int ][ !!! *2* !!! ][ 62 ][ 10 ][ 10 ]]
[[ signed char*->unsigned short ][ !!! *2* !!! ][ 64 ][ 10 ][ 11 ]]
[[ signed char*->unsigned long int ][ !!! *3* !!! ][ 66 ][ 11 ][ 11 ]]
[[ signed char*->unsigned long long ][ !!! *3* !!! ][ 68 ][ 11 ][ 11 ]]
[[ signed char*->float ][ 57 ][ 100 ][ 34 ][ !!! *22* !!! ]]
[[ signed char*->double ][ 56 ][ 100 ][ 33 ][ !!! *22* !!! ]]
[[ signed char*->long double ][ !!! *52* !!! ][ 117 ][ 77 ][ 58 ]]
[[ signed char*->array<char, 50> ][ !!! *<1* !!! ][ 77 ][ 10 ][ 9 ]]
[[ signed char*->string ][ !!! *1* !!! ][ 70 ][ 11 ][ --- ]]
[[ signed char*->container::string ][ !!! *1* !!! ][ 71 ][ 15 ][ --- ]]
[[ iterator_range<char*>->char ][ !!! *<1* !!! ][ 57 ][ 5 ][ 6 ]]
[[ iterator_range<char*>->signed char ][ !!! *<1* !!! ][ 65 ][ 5 ][ 7 ]]
[[ iterator_range<char*>->unsigned char ][ !!! *<1* !!! ][ 67 ][ 5 ][ 8 ]]
[[ iterator_range<char*>->int ][ !!! *3* !!! ][ 72 ][ 15 ][ 11 ]]
[[ iterator_range<char*>->short ][ !!! *3* !!! ][ 74 ][ 15 ][ 12 ]]
[[ iterator_range<char*>->long int ][ !!! *6* !!! ][ 75 ][ 15 ][ 11 ]]
[[ string->char ][ !!! *<1* !!! ][ 68 ][ 9 ][ 1 ]]
[[ string->signed char ][ !!! *<1* !!! ][ 65 ][ 10 ][ 10 ]]
[[ string->unsigned char ][ !!! *<1* !!! ][ 62 ][ 9 ][ 10 ]]
[[ int->string ][ !!! *4* !!! ][ 66 ][ 13 ][ 10 ]]
[[ short->string ][ !!! *4* !!! ][ 69 ][ 14 ][ 9 ]]
[[ long int->string ][ !!! *4* !!! ][ 67 ][ 13 ][ 9 ]]
[[ long long->string ][ !!! *4* !!! ][ 65 ][ 13 ][ 10 ]]
[[ unsigned int->string ][ !!! *4* !!! ][ 74 ][ 12 ][ 9 ]]
[[ unsigned short->string ][ !!! *4* !!! ][ 70 ][ 12 ][ 9 ]]
[[ unsigned long int->string ][ !!! *4* !!! ][ 71 ][ 12 ][ 9 ]]
[[ unsigned long long->string ][ !!! *4* !!! ][ 68 ][ 13 ][ 10 ]]
[[ float->string ][ 25 ][ 108 ][ 50 ][ !!! *22* !!! ]]
[[ double->string ][ 31 ][ 118 ][ 46 ][ !!! *22* !!! ]]
[[ long double->string ][ 43 ][ 125 ][ 51 ][ !!! *25* !!! ]]
[[ char*->char ][ !!! *<1* !!! ][ 57 ][ 5 ][ 5 ]]
[[ char*->signed char ][ !!! *<1* !!! ][ 57 ][ 5 ][ 7 ]]
[[ char*->unsigned char ][ !!! *<1* !!! ][ 58 ][ 6 ][ 7 ]]
[[ char*->int ][ !!! *2* !!! ][ 70 ][ 12 ][ 11 ]]
[[ char*->short ][ !!! *3* !!! ][ 67 ][ 12 ][ 11 ]]
[[ char*->long int ][ !!! *3* !!! ][ 68 ][ 11 ][ 11 ]]
[[ char*->long long ][ !!! *3* !!! ][ 63 ][ 13 ][ 11 ]]
[[ char*->unsigned int ][ !!! *2* !!! ][ 60 ][ 10 ][ 11 ]]
[[ char*->unsigned short ][ !!! *2* !!! ][ 63 ][ 10 ][ 11 ]]
[[ char*->unsigned long int ][ !!! *3* !!! ][ 68 ][ 11 ][ 11 ]]
[[ char*->unsigned long long ][ !!! *3* !!! ][ 67 ][ 11 ][ 11 ]]
[[ char*->float ][ 55 ][ 96 ][ 37 ][ !!! *21* !!! ]]
[[ char*->double ][ 55 ][ 95 ][ 33 ][ !!! *22* !!! ]]
[[ char*->long double ][ 51 ][ 88 ][ 34 ][ !!! *25* !!! ]]
[[ char*->array<char, 50> ][ !!! *<1* !!! ][ 61 ][ 11 ][ 9 ]]
[[ char*->string ][ !!! *1* !!! ][ 78 ][ 11 ][ --- ]]
[[ char*->container::string ][ !!! *1* !!! ][ 75 ][ 15 ][ --- ]]
[[ unsigned char*->char ][ !!! *<1* !!! ][ 65 ][ 5 ][ 5 ]]
[[ unsigned char*->signed char ][ !!! *<1* !!! ][ 61 ][ 5 ][ 7 ]]
[[ unsigned char*->unsigned char ][ !!! *<1* !!! ][ 60 ][ 5 ][ 7 ]]
[[ unsigned char*->int ][ !!! *6* !!! ][ 161 ][ 29 ][ 15 ]]
[[ unsigned char*->short ][ !!! *2* !!! ][ 68 ][ 11 ][ 11 ]]
[[ unsigned char*->long int ][ !!! *3* !!! ][ 69 ][ 11 ][ 11 ]]
[[ unsigned char*->long long ][ !!! *3* !!! ][ 64 ][ 12 ][ 11 ]]
[[ unsigned char*->unsigned int ][ !!! *2* !!! ][ 65 ][ 10 ][ 11 ]]
[[ unsigned char*->unsigned short ][ !!! *2* !!! ][ 63 ][ 10 ][ 10 ]]
[[ unsigned char*->unsigned long int ][ !!! *3* !!! ][ 63 ][ 11 ][ 11 ]]
[[ unsigned char*->unsigned long long ][ !!! *3* !!! ][ 65 ][ 11 ][ 11 ]]
[[ unsigned char*->float ][ 54 ][ 89 ][ 34 ][ !!! *21* !!! ]]
[[ unsigned char*->double ][ 55 ][ 90 ][ 33 ][ !!! *23* !!! ]]
[[ unsigned char*->long double ][ 53 ][ 90 ][ 32 ][ !!! *23* !!! ]]
[[ unsigned char*->array<char, 50> ][ !!! *<1* !!! ][ 65 ][ 10 ][ 9 ]]
[[ unsigned char*->string ][ !!! *1* !!! ][ 64 ][ 12 ][ --- ]]
[[ unsigned char*->container::string ][ !!! *1* !!! ][ 67 ][ 14 ][ --- ]]
[[ signed char*->char ][ !!! *<1* !!! ][ 56 ][ 5 ][ 6 ]]
[[ signed char*->signed char ][ !!! *<1* !!! ][ 60 ][ 5 ][ 7 ]]
[[ signed char*->unsigned char ][ !!! *<1* !!! ][ 57 ][ 5 ][ 7 ]]
[[ signed char*->int ][ !!! *2* !!! ][ 70 ][ 12 ][ 11 ]]
[[ signed char*->short ][ !!! *2* !!! ][ 66 ][ 11 ][ 11 ]]
[[ signed char*->long int ][ !!! *3* !!! ][ 68 ][ 11 ][ 11 ]]
[[ signed char*->long long ][ !!! *3* !!! ][ 71 ][ 13 ][ 11 ]]
[[ signed char*->unsigned int ][ !!! *2* !!! ][ 70 ][ 10 ][ 10 ]]
[[ signed char*->unsigned short ][ !!! *2* !!! ][ 63 ][ 10 ][ 11 ]]
[[ signed char*->unsigned long int ][ !!! *3* !!! ][ 62 ][ 12 ][ 11 ]]
[[ signed char*->unsigned long long ][ !!! *3* !!! ][ 64 ][ 11 ][ 11 ]]
[[ signed char*->float ][ 54 ][ 91 ][ 34 ][ !!! *21* !!! ]]
[[ signed char*->double ][ 56 ][ 94 ][ 31 ][ !!! *22* !!! ]]
[[ signed char*->long double ][ 53 ][ 93 ][ 33 ][ !!! *24* !!! ]]
[[ signed char*->array<char, 50> ][ !!! *<1* !!! ][ 147 ][ 26 ][ 21 ]]
[[ signed char*->string ][ !!! *2* !!! ][ 80 ][ 11 ][ --- ]]
[[ signed char*->container::string ][ !!! *1* !!! ][ 67 ][ 15 ][ --- ]]
[[ iterator_range<char*>->char ][ !!! *<1* !!! ][ 57 ][ 5 ][ 5 ]]
[[ iterator_range<char*>->signed char ][ !!! *<1* !!! ][ 57 ][ 7 ][ 7 ]]
[[ iterator_range<char*>->unsigned char ][ !!! *<1* !!! ][ 56 ][ 5 ][ 7 ]]
[[ iterator_range<char*>->int ][ !!! *3* !!! ][ 69 ][ 15 ][ 11 ]]
[[ iterator_range<char*>->short ][ !!! *2* !!! ][ 73 ][ 15 ][ 11 ]]
[[ iterator_range<char*>->long int ][ !!! *3* !!! ][ 76 ][ 15 ][ 11 ]]
[[ iterator_range<char*>->long long ][ !!! *3* !!! ][ 69 ][ 15 ][ 11 ]]
[[ iterator_range<char*>->unsigned int ][ !!! *2* !!! ][ 69 ][ 14 ][ 10 ]]
[[ iterator_range<char*>->unsigned short ][ !!! *2* !!! ][ 69 ][ 14 ][ 11 ]]
[[ iterator_range<char*>->unsigned long int ][ !!! *3* !!! ][ 75 ][ 15 ][ 11 ]]
[[ iterator_range<char*>->unsigned int ][ !!! *2* !!! ][ 69 ][ 14 ][ 11 ]]
[[ iterator_range<char*>->unsigned short ][ !!! *2* !!! ][ 68 ][ 13 ][ 11 ]]
[[ iterator_range<char*>->unsigned long int ][ !!! *3* !!! ][ 69 ][ 14 ][ 11 ]]
[[ iterator_range<char*>->unsigned long long ][ !!! *3* !!! ][ 71 ][ 15 ][ 11 ]]
[[ iterator_range<char*>->float ][ 56 ][ 98 ][ 42 ][ !!! *22* !!! ]]
[[ iterator_range<char*>->double ][ 56 ][ 112 ][ 44 ][ !!! *23* !!! ]]
[[ iterator_range<char*>->long double ][ 54 ][ 101 ][ 40 ][ !!! *25* !!! ]]
[[ iterator_range<char*>->array<char, 50> ][ !!! *<1* !!! ][ 80 ][ 18 ][ 9 ]]
[[ iterator_range<char*>->string ][ !!! *1* !!! ][ 138 ][ 52 ][ --- ]]
[[ iterator_range<char*>->container::string ][ !!! *1* !!! ][ 196 ][ 61 ][ --- ]]
[[ std::string_view->char ][ 57 ][ 150 ][ !!! *12* !!! ][ 14 ]]
[[ std::string_view->signed char ][ 55 ][ 148 ][ !!! *12* !!! ][ 18 ]]
[[ std::string_view->unsigned char ][ 57 ][ 142 ][ !!! *12* !!! ][ 18 ]]
[[ std::string_view->int ][ 64 ][ 168 ][ 29 ][ !!! *26* !!! ]]
[[ std::string_view->short ][ 73 ][ 178 ][ 29 ][ !!! *26* !!! ]]
[[ std::string_view->long int ][ 66 ][ 155 ][ 29 ][ !!! *27* !!! ]]
[[ std::string_view->long long ][ 63 ][ 176 ][ 28 ][ !!! *26* !!! ]]
[[ std::string_view->unsigned int ][ 73 ][ 160 ][ !!! *25* !!! ][ 27 ]]
[[ std::string_view->unsigned short ][ 67 ][ 158 ][ !!! *25* !!! ][ 26 ]]
[[ std::string_view->unsigned long int ][ 62 ][ 156 ][ 27 ][ !!! *26* !!! ]]
[[ std::string_view->unsigned long long ][ 75 ][ 154 ][ 28 ][ !!! *27* !!! ]]
[[ std::string_view->float ][ 203 ][ 232 ][ 84 ][ !!! *54* !!! ]]
[[ std::string_view->double ][ 213 ][ 246 ][ 79 ][ !!! *54* !!! ]]
[[ std::string_view->long double ][ 207 ][ 220 ][ 79 ][ !!! *58* !!! ]]
[[ std::string_view->array<char, 50> ][ 58 ][ 178 ][ 25 ][ !!! *22* !!! ]]
[[ std::string_view->string ][ 60 ][ 151 ][ !!! *27* !!! ][ --- ]]
[[ std::string_view->container::string ][ 60 ][ 168 ][ !!! *36* !!! ][ --- ]]
[[ array<char, 50>->char ][ !!! *<1* !!! ][ 147 ][ 13 ][ 15 ]]
[[ array<char, 50>->signed char ][ !!! *<1* !!! ][ 159 ][ 13 ][ 18 ]]
[[ array<char, 50>->unsigned char ][ !!! *<1* !!! ][ 143 ][ 12 ][ 18 ]]
[[ array<char, 50>->int ][ !!! *8* !!! ][ 170 ][ 29 ][ 27 ]]
[[ array<char, 50>->short ][ !!! *8* !!! ][ 172 ][ 29 ][ 27 ]]
[[ array<char, 50>->long int ][ !!! *8* !!! ][ 162 ][ 31 ][ 27 ]]
[[ array<char, 50>->long long ][ !!! *8* !!! ][ 164 ][ 28 ][ 28 ]]
[[ array<char, 50>->unsigned int ][ !!! *8* !!! ][ 165 ][ 26 ][ 27 ]]
[[ array<char, 50>->unsigned short ][ !!! *8* !!! ][ 165 ][ 26 ][ 27 ]]
[[ array<char, 50>->unsigned long int ][ !!! *8* !!! ][ 161 ][ 28 ][ 27 ]]
[[ array<char, 50>->unsigned long long ][ !!! *8* !!! ][ 155 ][ 28 ][ 27 ]]
[[ array<char, 50>->float ][ 141 ][ 240 ][ 89 ][ !!! *53* !!! ]]
[[ array<char, 50>->double ][ 137 ][ 101 ][ 31 ][ !!! *22* !!! ]]
[[ array<char, 50>->long double ][ 55 ][ 101 ][ 30 ][ !!! *24* !!! ]]
[[ array<char, 50>->array<char, 50> ][ !!! *<1* !!! ][ 68 ][ 10 ][ 9 ]]
[[ array<char, 50>->string ][ !!! *1* !!! ][ 67 ][ 11 ][ --- ]]
[[ array<char, 50>->container::string ][ !!! *1* !!! ][ 66 ][ 15 ][ --- ]]
[[ int->int ][ !!! *<1* !!! ][ 73 ][ 14 ][ --- ]]
[[ float->double ][ !!! *<1* !!! ][ 140 ][ 74 ][ --- ]]
[[ char->signed char ][ !!! *<1* !!! ][ 56 ][ 5 ][ --- ]]
[[ iterator_range<char*>->float ][ 59 ][ 111 ][ 41 ][ !!! *22* !!! ]]
[[ iterator_range<char*>->double ][ 56 ][ 107 ][ 39 ][ !!! *22* !!! ]]
[[ iterator_range<char*>->long double ][ 53 ][ 101 ][ 39 ][ !!! *23* !!! ]]
[[ iterator_range<char*>->array<char, 50> ][ !!! *<1* !!! ][ 73 ][ 17 ][ 9 ]]
[[ iterator_range<char*>->string ][ !!! *1* !!! ][ 86 ][ 20 ][ --- ]]
[[ iterator_range<char*>->container::string ][ !!! *<1* !!! ][ 86 ][ 27 ][ --- ]]
[[ std::string_view->char ][ !!! *<1* !!! ][ 53 ][ 5 ][ 5 ]]
[[ std::string_view->signed char ][ !!! *<1* !!! ][ 67 ][ 5 ][ 7 ]]
[[ std::string_view->unsigned char ][ !!! *<1* !!! ][ 58 ][ 5 ][ 7 ]]
[[ std::string_view->int ][ !!! *2* !!! ][ 64 ][ 11 ][ 11 ]]
[[ std::string_view->short ][ !!! *2* !!! ][ 64 ][ 11 ][ 11 ]]
[[ std::string_view->long int ][ !!! *3* !!! ][ 63 ][ 11 ][ 11 ]]
[[ std::string_view->long long ][ !!! *3* !!! ][ 67 ][ 13 ][ 11 ]]
[[ std::string_view->unsigned int ][ !!! *2* !!! ][ 63 ][ 10 ][ 11 ]]
[[ std::string_view->unsigned short ][ !!! *2* !!! ][ 80 ][ 25 ][ 26 ]]
[[ std::string_view->unsigned long int ][ !!! *7* !!! ][ 126 ][ 11 ][ 10 ]]
[[ std::string_view->unsigned long long ][ !!! *3* !!! ][ 65 ][ 11 ][ 11 ]]
[[ std::string_view->float ][ 59 ][ 101 ][ 35 ][ !!! *21* !!! ]]
[[ std::string_view->double ][ 51 ][ 91 ][ 31 ][ !!! *22* !!! ]]
[[ std::string_view->long double ][ 57 ][ 88 ][ 34 ][ !!! *23* !!! ]]
[[ std::string_view->array<char, 50> ][ !!! *<1* !!! ][ 65 ][ 10 ][ 9 ]]
[[ std::string_view->string ][ !!! *1* !!! ][ 63 ][ 12 ][ --- ]]
[[ std::string_view->container::string ][ !!! *2* !!! ][ 68 ][ 15 ][ --- ]]
[[ array<char, 50>->char ][ !!! *<1* !!! ][ 56 ][ 5 ][ 6 ]]
[[ array<char, 50>->signed char ][ !!! *<1* !!! ][ 57 ][ 5 ][ 7 ]]
[[ array<char, 50>->unsigned char ][ !!! *<1* !!! ][ 55 ][ 5 ][ 7 ]]
[[ array<char, 50>->int ][ !!! *3* !!! ][ 66 ][ 12 ][ 10 ]]
[[ array<char, 50>->short ][ !!! *3* !!! ][ 73 ][ 11 ][ 11 ]]
[[ array<char, 50>->long int ][ !!! *3* !!! ][ 64 ][ 12 ][ 10 ]]
[[ array<char, 50>->long long ][ !!! *3* !!! ][ 64 ][ 11 ][ 10 ]]
[[ array<char, 50>->unsigned int ][ !!! *3* !!! ][ 63 ][ 10 ][ 10 ]]
[[ array<char, 50>->unsigned short ][ !!! *3* !!! ][ 67 ][ 10 ][ 10 ]]
[[ array<char, 50>->unsigned long int ][ !!! *3* !!! ][ 69 ][ 11 ][ 10 ]]
[[ array<char, 50>->unsigned long long ][ !!! *3* !!! ][ 66 ][ 11 ][ 11 ]]
[[ array<char, 50>->float ][ 62 ][ 96 ][ 34 ][ !!! *21* !!! ]]
[[ array<char, 50>->double ][ 62 ][ 104 ][ 34 ][ !!! *24* !!! ]]
[[ array<char, 50>->long double ][ 56 ][ 92 ][ 32 ][ !!! *23* !!! ]]
[[ array<char, 50>->array<char, 50> ][ !!! *<1* !!! ][ 63 ][ 10 ][ 9 ]]
[[ array<char, 50>->string ][ !!! *1* !!! ][ 71 ][ 11 ][ --- ]]
[[ array<char, 50>->container::string ][ !!! *1* !!! ][ 65 ][ 23 ][ --- ]]
[[ int->int ][ !!! *<1* !!! ][ 70 ][ 14 ][ --- ]]
[[ float->double ][ !!! *<1* !!! ][ 143 ][ 78 ][ --- ]]
[[ char->signed char ][ !!! *<1* !!! ][ 59 ][ 5 ][ --- ]]
]
[endsect]
[section GNU C++ version 10.5.0]
[table:id Performance Table ( GNU C++ version 10.5.0)
[[From->To] [lexical_cast] [std::stringstream with construction] [std::stringstream without construction][scanf/printf]]
[[ string->char ][ !!! *<1* !!! ][ 57 ][ 5 ][ 5 ]]
[[ string->signed char ][ !!! *<1* !!! ][ 60 ][ 6 ][ 7 ]]
[[ string->unsigned char ][ !!! *<1* !!! ][ 56 ][ 5 ][ 7 ]]
[[ string->int ][ !!! *3* !!! ][ 69 ][ 11 ][ 10 ]]
[[ string->short ][ !!! *3* !!! ][ 66 ][ 11 ][ 10 ]]
[[ string->long int ][ !!! *3* !!! ][ 67 ][ 11 ][ 10 ]]
[[ string->long long ][ !!! *4* !!! ][ 71 ][ 13 ][ 10 ]]
[[ string->unsigned int ][ !!! *3* !!! ][ 56 ][ 11 ][ 10 ]]
[[ string->unsigned short ][ !!! *3* !!! ][ 61 ][ 10 ][ 10 ]]
[[ string->unsigned long int ][ !!! *3* !!! ][ 62 ][ 11 ][ 10 ]]
[[ string->unsigned long long ][ !!! *3* !!! ][ 60 ][ 13 ][ 10 ]]
[[ string->float ][ 51 ][ 96 ][ 35 ][ !!! *21* !!! ]]
[[ string->double ][ 52 ][ 92 ][ 31 ][ !!! *21* !!! ]]
[[ string->long double ][ 48 ][ 78 ][ 29 ][ !!! *23* !!! ]]
[[ string->array<char, 50> ][ !!! *<1* !!! ][ 65 ][ 11 ][ 8 ]]
[[ string->string ][ !!! *1* !!! ][ 67 ][ 11 ][ --- ]]
[[ string->container::string ][ !!! *<1* !!! ][ 64 ][ 12 ][ --- ]]
[[ string->char ][ !!! *<1* !!! ][ 58 ][ 10 ][ 7 ]]
[[ string->signed char ][ !!! *<1* !!! ][ 58 ][ 10 ][ 10 ]]
[[ string->unsigned char ][ !!! *<1* !!! ][ 57 ][ 13 ][ 10 ]]
[[ int->string ][ !!! *3* !!! ][ 68 ][ 13 ][ 9 ]]
[[ short->string ][ !!! *3* !!! ][ 64 ][ 14 ][ 10 ]]
[[ long int->string ][ !!! *3* !!! ][ 62 ][ 13 ][ 10 ]]
[[ long long->string ][ !!! *3* !!! ][ 69 ][ 15 ][ 10 ]]
[[ unsigned int->string ][ !!! *3* !!! ][ 64 ][ 17 ][ 11 ]]
[[ unsigned short->string ][ !!! *3* !!! ][ 65 ][ 15 ][ 10 ]]
[[ unsigned long int->string ][ !!! *3* !!! ][ 66 ][ 13 ][ 10 ]]
[[ unsigned long long->string ][ !!! *3* !!! ][ 75 ][ 14 ][ 10 ]]
[[ float->string ][ 28 ][ 104 ][ 48 ][ !!! *27* !!! ]]
[[ double->string ][ 33 ][ 101 ][ 53 ][ !!! *23* !!! ]]
[[ long double->string ][ 44 ][ 111 ][ 52 ][ !!! *25* !!! ]]
[[ char*->char ][ !!! *<1* !!! ][ 52 ][ 5 ][ 5 ]]
[[ char*->signed char ][ !!! *<1* !!! ][ 131 ][ 13 ][ 17 ]]
[[ char*->unsigned char ][ !!! *<1* !!! ][ 129 ][ 13 ][ 17 ]]
[[ char*->int ][ !!! *9* !!! ][ 155 ][ 29 ][ 25 ]]
[[ char*->short ][ !!! *9* !!! ][ 162 ][ 29 ][ 25 ]]
[[ char*->long int ][ !!! *9* !!! ][ 154 ][ 29 ][ 25 ]]
[[ char*->long long ][ !!! *9* !!! ][ 159 ][ 32 ][ 25 ]]
[[ char*->unsigned int ][ !!! *9* !!! ][ 162 ][ 26 ][ 25 ]]
[[ char*->unsigned short ][ !!! *9* !!! ][ 144 ][ 26 ][ 25 ]]
[[ char*->unsigned long int ][ !!! *10* !!! ][ 153 ][ 31 ][ 26 ]]
[[ char*->unsigned long long ][ !!! *10* !!! ][ 143 ][ 28 ][ 25 ]]
[[ char*->float ][ 130 ][ 224 ][ 84 ][ !!! *52* !!! ]]
[[ char*->double ][ 127 ][ 220 ][ 79 ][ !!! *53* !!! ]]
[[ char*->long double ][ 122 ][ 204 ][ 76 ][ !!! *60* !!! ]]
[[ char*->array<char, 50> ][ !!! *1* !!! ][ 160 ][ 26 ][ 20 ]]
[[ char*->string ][ !!! *3* !!! ][ 165 ][ 29 ][ --- ]]
[[ char*->container::string ][ !!! *2* !!! ][ 171 ][ 29 ][ --- ]]
[[ unsigned char*->char ][ !!! *<1* !!! ][ 130 ][ 13 ][ 14 ]]
[[ unsigned char*->signed char ][ !!! *<1* !!! ][ 131 ][ 13 ][ 17 ]]
[[ unsigned char*->unsigned char ][ !!! *<1* !!! ][ 130 ][ 14 ][ 17 ]]
[[ unsigned char*->int ][ !!! *9* !!! ][ 163 ][ 29 ][ 25 ]]
[[ unsigned char*->short ][ !!! *9* !!! ][ 149 ][ 29 ][ 26 ]]
[[ unsigned char*->long int ][ !!! *9* !!! ][ 152 ][ 29 ][ 26 ]]
[[ unsigned char*->long long ][ !!! *9* !!! ][ 153 ][ 31 ][ 26 ]]
[[ unsigned char*->unsigned int ][ !!! *9* !!! ][ 145 ][ 28 ][ 25 ]]
[[ unsigned char*->unsigned short ][ !!! *9* !!! ][ 150 ][ 26 ][ 26 ]]
[[ unsigned char*->unsigned long int ][ 10 ][ 94 ][ 11 ][ !!! *10* !!! ]]
[[ unsigned char*->unsigned long long ][ !!! *4* !!! ][ 62 ][ 13 ][ 10 ]]
[[ unsigned char*->float ][ 60 ][ 86 ][ 33 ][ !!! *21* !!! ]]
[[ unsigned char*->double ][ 56 ][ 94 ][ 33 ][ !!! *23* !!! ]]
[[ unsigned char*->long double ][ 49 ][ 85 ][ 30 ][ !!! *23* !!! ]]
[[ unsigned char*->array<char, 50> ][ !!! *<1* !!! ][ 60 ][ 10 ][ 8 ]]
[[ unsigned char*->string ][ !!! *1* !!! ][ 69 ][ 12 ][ --- ]]
[[ unsigned char*->container::string ][ !!! *<1* !!! ][ 72 ][ 12 ][ --- ]]
[[ signed char*->char ][ !!! *<1* !!! ][ 57 ][ 5 ][ 5 ]]
[[ signed char*->signed char ][ !!! *<1* !!! ][ 55 ][ 5 ][ 7 ]]
[[ signed char*->unsigned char ][ !!! *<1* !!! ][ 52 ][ 5 ][ 7 ]]
[[ signed char*->int ][ !!! *3* !!! ][ 62 ][ 12 ][ 11 ]]
[[ signed char*->short ][ !!! *3* !!! ][ 62 ][ 12 ][ 15 ]]
[[ signed char*->long int ][ !!! *6* !!! ][ 62 ][ 12 ][ 11 ]]
[[ signed char*->long long ][ !!! *3* !!! ][ 59 ][ 13 ][ 11 ]]
[[ signed char*->unsigned int ][ !!! *4* !!! ][ 55 ][ 10 ][ 11 ]]
[[ signed char*->unsigned short ][ !!! *3* !!! ][ 61 ][ 10 ][ 10 ]]
[[ signed char*->unsigned long int ][ !!! *4* !!! ][ 62 ][ 11 ][ 11 ]]
[[ signed char*->unsigned long long ][ !!! *3* !!! ][ 62 ][ 11 ][ 11 ]]
[[ signed char*->float ][ 52 ][ 92 ][ 40 ][ !!! *21* !!! ]]
[[ signed char*->double ][ 55 ][ 89 ][ 31 ][ !!! *22* !!! ]]
[[ signed char*->long double ][ 49 ][ 86 ][ 30 ][ !!! *23* !!! ]]
[[ signed char*->array<char, 50> ][ !!! *<1* !!! ][ 61 ][ 11 ][ 8 ]]
[[ signed char*->string ][ !!! *1* !!! ][ 72 ][ 13 ][ --- ]]
[[ signed char*->container::string ][ !!! *<1* !!! ][ 67 ][ 13 ][ --- ]]
[[ iterator_range<char*>->char ][ !!! *<1* !!! ][ 54 ][ 5 ][ 5 ]]
[[ iterator_range<char*>->signed char ][ !!! *<1* !!! ][ 54 ][ 5 ][ 7 ]]
[[ iterator_range<char*>->unsigned char ][ !!! *<1* !!! ][ 59 ][ 7 ][ 9 ]]
[[ iterator_range<char*>->int ][ !!! *3* !!! ][ 67 ][ 15 ][ 10 ]]
[[ iterator_range<char*>->short ][ !!! *3* !!! ][ 69 ][ 15 ][ 10 ]]
[[ iterator_range<char*>->long int ][ !!! *3* !!! ][ 66 ][ 15 ][ 10 ]]
[[ iterator_range<char*>->long long ][ !!! *3* !!! ][ 67 ][ 16 ][ 10 ]]
[[ iterator_range<char*>->unsigned int ][ !!! *3* !!! ][ 65 ][ 14 ][ 10 ]]
[[ iterator_range<char*>->unsigned short ][ !!! *3* !!! ][ 65 ][ 14 ][ 10 ]]
[[ iterator_range<char*>->unsigned long int ][ !!! *3* !!! ][ 69 ][ 15 ][ 10 ]]
[[ iterator_range<char*>->unsigned long long ][ !!! *4* !!! ][ 70 ][ 16 ][ 10 ]]
[[ iterator_range<char*>->float ][ 54 ][ 93 ][ 42 ][ !!! *21* !!! ]]
[[ iterator_range<char*>->double ][ 91 ][ 231 ][ 96 ][ !!! *54* !!! ]]
[[ iterator_range<char*>->long double ][ 118 ][ 225 ][ 90 ][ !!! *57* !!! ]]
[[ iterator_range<char*>->array<char, 50> ][ !!! *1* !!! ][ 171 ][ 45 ][ 20 ]]
[[ iterator_range<char*>->string ][ !!! *2* !!! ][ 194 ][ 51 ][ --- ]]
[[ iterator_range<char*>->container::string ][ !!! *1* !!! ][ 188 ][ 53 ][ --- ]]
[[ std::string_view->char ][ 54 ][ 141 ][ !!! *12* !!! ][ 13 ]]
[[ std::string_view->signed char ][ 59 ][ 145 ][ !!! *12* !!! ][ 17 ]]
[[ std::string_view->unsigned char ][ 58 ][ 148 ][ !!! *13* !!! ][ 17 ]]
[[ std::string_view->int ][ 65 ][ 166 ][ 28 ][ !!! *25* !!! ]]
[[ std::string_view->short ][ 64 ][ 167 ][ 29 ][ !!! *26* !!! ]]
[[ std::string_view->long int ][ 62 ][ 162 ][ 28 ][ !!! *25* !!! ]]
[[ std::string_view->long long ][ 66 ][ 161 ][ 28 ][ !!! *25* !!! ]]
[[ std::string_view->unsigned int ][ 64 ][ 158 ][ 25 ][ !!! *25* !!! ]]
[[ std::string_view->unsigned short ][ 67 ][ 162 ][ 27 ][ !!! *25* !!! ]]
[[ std::string_view->unsigned long int ][ 65 ][ 166 ][ 28 ][ !!! *26* !!! ]]
[[ std::string_view->unsigned long long ][ 63 ][ 162 ][ 28 ][ !!! *25* !!! ]]
[[ std::string_view->float ][ 202 ][ 219 ][ 84 ][ !!! *52* !!! ]]
[[ std::string_view->double ][ 196 ][ 233 ][ 78 ][ !!! *53* !!! ]]
[[ std::string_view->long double ][ 201 ][ 106 ][ 30 ][ !!! *23* !!! ]]
[[ std::string_view->array<char, 50> ][ 25 ][ 69 ][ 13 ][ !!! *10* !!! ]]
[[ std::string_view->string ][ 25 ][ 67 ][ !!! *12* !!! ][ --- ]]
[[ std::string_view->container::string ][ 26 ][ 61 ][ !!! *12* !!! ][ --- ]]
[[ array<char, 50>->char ][ !!! *<1* !!! ][ 58 ][ 6 ][ 5 ]]
[[ array<char, 50>->signed char ][ !!! *<1* !!! ][ 52 ][ 5 ][ 7 ]]
[[ array<char, 50>->unsigned char ][ !!! *<1* !!! ][ 52 ][ 5 ][ 6 ]]
[[ array<char, 50>->int ][ !!! *3* !!! ][ 67 ][ 12 ][ 10 ]]
[[ array<char, 50>->short ][ !!! *3* !!! ][ 75 ][ 12 ][ 10 ]]
[[ array<char, 50>->long int ][ !!! *3* !!! ][ 64 ][ 12 ][ 10 ]]
[[ array<char, 50>->long long ][ !!! *3* !!! ][ 69 ][ 12 ][ 10 ]]
[[ array<char, 50>->unsigned int ][ !!! *3* !!! ][ 64 ][ 11 ][ 10 ]]
[[ array<char, 50>->unsigned short ][ !!! *3* !!! ][ 71 ][ 12 ][ 10 ]]
[[ array<char, 50>->unsigned long int ][ !!! *4* !!! ][ 65 ][ 15 ][ 10 ]]
[[ array<char, 50>->unsigned long long ][ !!! *3* !!! ][ 73 ][ 11 ][ 10 ]]
[[ array<char, 50>->float ][ 56 ][ 86 ][ 42 ][ !!! *23* !!! ]]
[[ array<char, 50>->double ][ 59 ][ 93 ][ 36 ][ !!! *21* !!! ]]
[[ array<char, 50>->long double ][ 50 ][ 85 ][ 29 ][ !!! *23* !!! ]]
[[ array<char, 50>->array<char, 50> ][ !!! *<1* !!! ][ 63 ][ 12 ][ 8 ]]
[[ array<char, 50>->string ][ !!! *1* !!! ][ 67 ][ 11 ][ --- ]]
[[ array<char, 50>->container::string ][ !!! *1* !!! ][ 72 ][ 13 ][ --- ]]
[[ int->int ][ !!! *<1* !!! ][ 80 ][ 19 ][ --- ]]
[[ float->double ][ !!! *<1* !!! ][ 141 ][ 93 ][ --- ]]
[[ char->signed char ][ !!! *<1* !!! ][ 59 ][ 5 ][ --- ]]
[[ string->char ][ !!! *<1* !!! ][ 68 ][ 6 ][ 7 ]]
[[ string->signed char ][ !!! *<1* !!! ][ 54 ][ 5 ][ 7 ]]
[[ string->unsigned char ][ !!! *<1* !!! ][ 57 ][ 5 ][ 6 ]]
[[ string->int ][ !!! *3* !!! ][ 60 ][ 12 ][ 10 ]]
[[ string->short ][ !!! *4* !!! ][ 54 ][ 12 ][ 10 ]]
[[ string->long int ][ !!! *3* !!! ][ 58 ][ 13 ][ 11 ]]
[[ string->long long ][ !!! *4* !!! ][ 53 ][ 12 ][ 10 ]]
[[ string->unsigned int ][ !!! *3* !!! ][ 52 ][ 10 ][ 10 ]]
[[ string->unsigned short ][ !!! *3* !!! ][ 53 ][ 12 ][ 10 ]]
[[ string->unsigned long int ][ !!! *3* !!! ][ 54 ][ 11 ][ 10 ]]
[[ string->unsigned long long ][ !!! *3* !!! ][ 54 ][ 11 ][ 10 ]]
[[ string->float ][ 47 ][ 83 ][ 36 ][ !!! *21* !!! ]]
[[ string->double ][ 47 ][ 76 ][ 29 ][ !!! *21* !!! ]]
[[ string->long double ][ 45 ][ 79 ][ 29 ][ !!! *24* !!! ]]
[[ string->array<char, 50> ][ !!! *<1* !!! ][ 55 ][ 10 ][ 8 ]]
[[ string->string ][ !!! *1* !!! ][ 55 ][ 11 ][ --- ]]
[[ string->container::string ][ !!! *<1* !!! ][ 57 ][ 11 ][ --- ]]
[[ string->char ][ !!! *<1* !!! ][ 51 ][ 9 ][ 7 ]]
[[ string->signed char ][ !!! *<1* !!! ][ 54 ][ 9 ][ 9 ]]
[[ string->unsigned char ][ !!! *<1* !!! ][ 51 ][ 9 ][ 9 ]]
[[ int->string ][ !!! *3* !!! ][ 56 ][ 18 ][ 9 ]]
[[ short->string ][ !!! *3* !!! ][ 58 ][ 13 ][ 10 ]]
[[ long int->string ][ !!! *3* !!! ][ 57 ][ 12 ][ 11 ]]
[[ long long->string ][ !!! *3* !!! ][ 57 ][ 12 ][ 12 ]]
[[ unsigned int->string ][ !!! *3* !!! ][ 57 ][ 12 ][ 11 ]]
[[ unsigned short->string ][ !!! *3* !!! ][ 57 ][ 12 ][ 10 ]]
[[ unsigned long int->string ][ !!! *3* !!! ][ 55 ][ 12 ][ 10 ]]
[[ unsigned long long->string ][ !!! *3* !!! ][ 57 ][ 12 ][ 10 ]]
[[ float->string ][ 26 ][ 93 ][ 45 ][ !!! *24* !!! ]]
[[ double->string ][ 33 ][ 96 ][ 49 ][ !!! *27* !!! ]]
[[ long double->string ][ 42 ][ 97 ][ 47 ][ !!! *25* !!! ]]
[[ char*->char ][ !!! *<1* !!! ][ 48 ][ 5 ][ 5 ]]
[[ char*->signed char ][ !!! *<1* !!! ][ 53 ][ 5 ][ 7 ]]
[[ char*->unsigned char ][ !!! *<1* !!! ][ 48 ][ 5 ][ 7 ]]
[[ char*->int ][ !!! *4* !!! ][ 58 ][ 11 ][ 10 ]]
[[ char*->short ][ !!! *3* !!! ][ 56 ][ 12 ][ 10 ]]
[[ char*->long int ][ !!! *3* !!! ][ 56 ][ 11 ][ 10 ]]
[[ char*->long long ][ !!! *3* !!! ][ 56 ][ 11 ][ 10 ]]
[[ char*->unsigned int ][ !!! *3* !!! ][ 120 ][ 25 ][ 25 ]]
[[ char*->unsigned short ][ !!! *8* !!! ][ 135 ][ 26 ][ 25 ]]
[[ char*->unsigned long int ][ !!! *8* !!! ][ 141 ][ 28 ][ 26 ]]
[[ char*->unsigned long long ][ !!! *8* !!! ][ 138 ][ 27 ][ 25 ]]
[[ char*->float ][ 117 ][ 196 ][ 78 ][ !!! *54* !!! ]]
[[ char*->double ][ 106 ][ 187 ][ 70 ][ !!! *55* !!! ]]
[[ char*->long double ][ 118 ][ 200 ][ 81 ][ !!! *57* !!! ]]
[[ char*->array<char, 50> ][ !!! *2* !!! ][ 131 ][ 25 ][ 24 ]]
[[ char*->string ][ !!! *3* !!! ][ 137 ][ 31 ][ --- ]]
[[ char*->container::string ][ !!! *2* !!! ][ 146 ][ 30 ][ --- ]]
[[ unsigned char*->char ][ !!! *<1* !!! ][ 116 ][ 13 ][ 14 ]]
[[ unsigned char*->signed char ][ !!! *1* !!! ][ 118 ][ 12 ][ 17 ]]
[[ unsigned char*->unsigned char ][ !!! *<1* !!! ][ 116 ][ 14 ][ 18 ]]
[[ unsigned char*->int ][ !!! *9* !!! ][ 133 ][ 30 ][ 29 ]]
[[ unsigned char*->short ][ !!! *10* !!! ][ 133 ][ 28 ][ 26 ]]
[[ unsigned char*->long int ][ !!! *10* !!! ][ 139 ][ 28 ][ 26 ]]
[[ unsigned char*->long long ][ !!! *9* !!! ][ 131 ][ 29 ][ 27 ]]
[[ unsigned char*->unsigned int ][ !!! *8* !!! ][ 131 ][ 28 ][ 28 ]]
[[ unsigned char*->unsigned short ][ !!! *8* !!! ][ 130 ][ 28 ][ 27 ]]
[[ unsigned char*->unsigned long int ][ !!! *8* !!! ][ 131 ][ 29 ][ 26 ]]
[[ unsigned char*->unsigned long long ][ !!! *8* !!! ][ 132 ][ 28 ][ 25 ]]
[[ unsigned char*->float ][ 115 ][ 187 ][ 47 ][ !!! *22* !!! ]]
[[ unsigned char*->double ][ !!! *47* !!! ][ 75 ][ 60 ][ 53 ]]
[[ unsigned char*->long double ][ 110 ][ 74 ][ 29 ][ !!! *23* !!! ]]
[[ unsigned char*->array<char, 50> ][ !!! *<1* !!! ][ 56 ][ 10 ][ 8 ]]
[[ unsigned char*->string ][ !!! *1* !!! ][ 54 ][ 11 ][ --- ]]
[[ unsigned char*->container::string ][ !!! *<1* !!! ][ 60 ][ 13 ][ --- ]]
[[ signed char*->char ][ !!! *<1* !!! ][ 47 ][ 5 ][ 5 ]]
[[ signed char*->signed char ][ !!! *<1* !!! ][ 47 ][ 5 ][ 7 ]]
[[ signed char*->unsigned char ][ !!! *<1* !!! ][ 47 ][ 5 ][ 7 ]]
[[ signed char*->int ][ !!! *3* !!! ][ 57 ][ 11 ][ 10 ]]
[[ signed char*->short ][ !!! *3* !!! ][ 55 ][ 11 ][ 10 ]]
[[ signed char*->long int ][ !!! *3* !!! ][ 55 ][ 12 ][ 10 ]]
[[ signed char*->long long ][ !!! *3* !!! ][ 54 ][ 12 ][ 10 ]]
[[ signed char*->unsigned int ][ !!! *3* !!! ][ 55 ][ 11 ][ 10 ]]
[[ signed char*->unsigned short ][ !!! *3* !!! ][ 54 ][ 11 ][ 10 ]]
[[ signed char*->unsigned long int ][ !!! *4* !!! ][ 54 ][ 12 ][ 10 ]]
[[ signed char*->unsigned long long ][ !!! *3* !!! ][ 55 ][ 12 ][ 10 ]]
[[ signed char*->float ][ 53 ][ 78 ][ 32 ][ !!! *21* !!! ]]
[[ signed char*->double ][ 44 ][ 76 ][ 28 ][ !!! *21* !!! ]]
[[ signed char*->long double ][ !!! *45* !!! ][ 155 ][ 80 ][ 56 ]]
[[ signed char*->array<char, 50> ][ !!! *1* !!! ][ 125 ][ 26 ][ 20 ]]
[[ signed char*->string ][ !!! *3* !!! ][ 137 ][ 28 ][ --- ]]
[[ signed char*->container::string ][ !!! *2* !!! ][ 135 ][ 29 ][ --- ]]
[[ iterator_range<char*>->char ][ !!! *<1* !!! ][ 114 ][ 13 ][ 13 ]]
[[ iterator_range<char*>->signed char ][ !!! *<1* !!! ][ 114 ][ 13 ][ 18 ]]
[[ iterator_range<char*>->unsigned char ][ !!! *<1* !!! ][ 114 ][ 13 ][ 17 ]]
[[ iterator_range<char*>->int ][ !!! *9* !!! ][ 143 ][ 37 ][ 25 ]]
[[ iterator_range<char*>->short ][ !!! *8* !!! ][ 146 ][ 37 ][ 25 ]]
[[ iterator_range<char*>->long int ][ !!! *8* !!! ][ 144 ][ 37 ][ 25 ]]
[[ iterator_range<char*>->long long ][ !!! *8* !!! ][ 142 ][ 36 ][ 27 ]]
[[ iterator_range<char*>->unsigned int ][ !!! *8* !!! ][ 138 ][ 33 ][ 25 ]]
[[ iterator_range<char*>->unsigned short ][ !!! *8* !!! ][ 137 ][ 33 ][ 25 ]]
[[ iterator_range<char*>->unsigned long int ][ !!! *8* !!! ][ 145 ][ 36 ][ 26 ]]
[[ iterator_range<char*>->unsigned long long ][ !!! *8* !!! ][ 141 ][ 36 ][ 27 ]]
[[ iterator_range<char*>->float ][ 118 ][ 209 ][ 108 ][ !!! *57* !!! ]]
[[ iterator_range<char*>->double ][ 116 ][ 202 ][ 87 ][ !!! *52* !!! ]]
[[ iterator_range<char*>->long double ][ 106 ][ 199 ][ 90 ][ !!! *56* !!! ]]
[[ iterator_range<char*>->array<char, 50> ][ !!! *1* !!! ][ 146 ][ 43 ][ 20 ]]
[[ iterator_range<char*>->string ][ !!! *2* !!! ][ 161 ][ 52 ][ --- ]]
[[ iterator_range<char*>->container::string ][ !!! *1* !!! ][ 158 ][ 51 ][ --- ]]
[[ std::string_view->char ][ !!! *<1* !!! ][ 112 ][ 12 ][ 13 ]]
[[ std::string_view->signed char ][ !!! *<1* !!! ][ 112 ][ 12 ][ 17 ]]
[[ std::string_view->unsigned char ][ !!! *<1* !!! ][ 113 ][ 12 ][ 16 ]]
[[ std::string_view->int ][ !!! *9* !!! ][ 131 ][ 28 ][ 25 ]]
[[ std::string_view->short ][ !!! *9* !!! ][ 133 ][ 27 ][ 25 ]]
[[ std::string_view->long int ][ !!! *10* !!! ][ 132 ][ 27 ][ 25 ]]
[[ std::string_view->long long ][ !!! *9* !!! ][ 132 ][ 27 ][ 25 ]]
[[ std::string_view->unsigned int ][ !!! *8* !!! ][ 125 ][ 24 ][ 25 ]]
[[ std::string_view->unsigned short ][ !!! *8* !!! ][ 125 ][ 24 ][ 26 ]]
[[ std::string_view->unsigned long int ][ !!! *9* !!! ][ 130 ][ 28 ][ 25 ]]
[[ std::string_view->unsigned long long ][ !!! *8* !!! ][ 135 ][ 29 ][ 29 ]]
[[ std::string_view->float ][ 134 ][ 212 ][ 79 ][ !!! *58* !!! ]]
[[ std::string_view->double ][ 126 ][ 197 ][ 72 ][ !!! *53* !!! ]]
[[ std::string_view->long double ][ 109 ][ 178 ][ 71 ][ !!! *56* !!! ]]
[[ std::string_view->array<char, 50> ][ !!! *3* !!! ][ 124 ][ 25 ][ 20 ]]
[[ std::string_view->string ][ !!! *4* !!! ][ 139 ][ 27 ][ --- ]]
[[ std::string_view->container::string ][ !!! *3* !!! ][ 144 ][ 29 ][ --- ]]
[[ array<char, 50>->char ][ !!! *<1* !!! ][ 114 ][ 13 ][ 13 ]]
[[ array<char, 50>->signed char ][ !!! *<1* !!! ][ 114 ][ 14 ][ 17 ]]
[[ array<char, 50>->unsigned char ][ !!! *<1* !!! ][ 114 ][ 13 ][ 16 ]]
[[ array<char, 50>->int ][ !!! *7* !!! ][ 143 ][ 28 ][ 25 ]]
[[ array<char, 50>->short ][ !!! *8* !!! ][ 144 ][ 28 ][ 25 ]]
[[ array<char, 50>->long int ][ !!! *8* !!! ][ 138 ][ 28 ][ 25 ]]
[[ array<char, 50>->long long ][ !!! *8* !!! ][ 135 ][ 28 ][ 25 ]]
[[ array<char, 50>->unsigned int ][ !!! *7* !!! ][ 130 ][ 25 ][ 25 ]]
[[ array<char, 50>->unsigned short ][ !!! *7* !!! ][ 129 ][ 25 ][ 25 ]]
[[ array<char, 50>->unsigned long int ][ !!! *7* !!! ][ 130 ][ 28 ][ 25 ]]
[[ array<char, 50>->unsigned long long ][ !!! *8* !!! ][ 132 ][ 27 ][ 25 ]]
[[ array<char, 50>->float ][ 114 ][ 102 ][ 32 ][ !!! *22* !!! ]]
[[ array<char, 50>->double ][ 42 ][ 78 ][ 27 ][ !!! *21* !!! ]]
[[ array<char, 50>->long double ][ 44 ][ 79 ][ 29 ][ !!! *23* !!! ]]
[[ array<char, 50>->array<char, 50> ][ !!! *<1* !!! ][ 54 ][ 10 ][ 8 ]]
[[ array<char, 50>->string ][ !!! *1* !!! ][ 55 ][ 11 ][ --- ]]
[[ array<char, 50>->container::string ][ !!! *1* !!! ][ 56 ][ 12 ][ --- ]]
[[ int->int ][ !!! *<1* !!! ][ 58 ][ 14 ][ --- ]]
[[ float->double ][ !!! *<1* !!! ][ 124 ][ 75 ][ --- ]]
[[ char->signed char ][ !!! *<1* !!! ][ 48 ][ 5 ][ --- ]]
]
[endsect]
@@ -797,6 +798,7 @@ Do not use this results to compare compilers, because tests were taken on differ
[/ END of section, generated by performance measuring program ]
[endsect]
@@ -42,6 +42,10 @@
#include <array>
#ifndef BOOST_NO_CXX17_HDR_STRING_VIEW
#include <string_view>
#endif
#include <boost/lexical_cast/detail/buffer_view.hpp>
#include <boost/container/container_fwd.hpp>
@@ -55,6 +59,9 @@ namespace boost {
template<class IteratorT>
class iterator_range;
// Forward declaration of boost::basic_string_view from Utility
template<class Ch, class Tr> class basic_string_view;
namespace detail // normalize_single_byte_char<Char>
{
// Converts signed/unsigned char to char
@@ -172,6 +179,19 @@ namespace boost {
> {};
#endif
#ifndef BOOST_NO_CXX17_HDR_STRING_VIEW
template < class Char, class Traits >
struct stream_char_common< std::basic_string_view< Char, Traits > >
{
typedef Char type;
};
#endif
template < class Char, class Traits >
struct stream_char_common< boost::basic_string_view< Char, Traits > >
{
typedef Char type;
};
#ifdef BOOST_HAS_INT128
template <> struct stream_char_common< boost::int128_type >: public boost::type_identity< char > {};
template <> struct stream_char_common< boost::uint128_type >: public boost::type_identity< char > {};
@@ -326,6 +346,21 @@ namespace boost {
{
typedef Traits trait_t;
};
#ifndef BOOST_NO_CXX17_HDR_STRING_VIEW
template < class Char, class Traits >
struct extract_char_traits< Char, std::basic_string_view< Char, Traits > >
: boost::true_type
{
typedef Traits trait_t;
};
#endif
template < class Char, class Traits >
struct extract_char_traits< Char, boost::basic_string_view< Char, Traits > >
: boost::true_type
{
typedef Traits trait_t;
};
}
namespace detail // array_to_pointer_decay<T>
@@ -89,6 +89,9 @@ namespace boost {
class array;
template<class IteratorT>
class iterator_range;
// forward declaration of boost::basic_string_view from Utility
template<class Ch, class Tr> class basic_string_view;
}
namespace boost { namespace detail { namespace lcast {
@@ -247,6 +250,16 @@ namespace boost { namespace detail { namespace lcast {
}
#endif
public:
template <class C>
using enable_if_compatible_char_t = typename boost::enable_if_c<
boost::is_same<const C, const CharT>::value || (
boost::is_same<const char, const CharT>::value && (
boost::is_same<const C, const unsigned char>::value ||
boost::is_same<const C, const signed char>::value
)
), bool
>::type;
template<class Alloc>
bool stream_in(lcast::exact<std::basic_string<CharT,Traits,Alloc>> x) noexcept {
start = x.payload.data();
@@ -275,19 +288,12 @@ namespace boost { namespace detail { namespace lcast {
}
template <class C>
typename boost::enable_if_c<boost::detail::is_character<C>::value && sizeof(CharT) == sizeof(C), bool>::type
enable_if_compatible_char_t<C>
stream_in(lcast::exact<boost::iterator_range<C*>> x) noexcept {
auto buf = boost::conversion::detail::make_buffer_view(x.payload.begin(), x.payload.end());
return stream_in(lcast::exact<decltype(buf)>{buf});
}
template <class C>
typename boost::enable_if_c<boost::detail::is_character<C>::value && sizeof(CharT) == sizeof(C), bool>::type
stream_in(lcast::exact<boost::iterator_range<const C*>> x) noexcept {
auto buf = boost::conversion::detail::make_buffer_view(x.payload.begin(), x.payload.end());
return stream_in(lcast::exact<decltype(buf)>{buf});
}
bool stream_in(lcast::exact<char> x) { return shl_char(x.payload); }
bool stream_in(lcast::exact<unsigned char> x) { return shl_char(static_cast<char>(x.payload)); }
bool stream_in(lcast::exact<signed char> x) { return shl_char(static_cast<char>(x.payload)); }
@@ -297,12 +303,8 @@ namespace boost { namespace detail { namespace lcast {
stream_in(lcast::exact<C> x) { return shl_char(x.payload); }
template <class Type>
typename boost::enable_if_c<boost::detail::is_character<Type>::value && sizeof(CharT) == sizeof(Type), bool>::type
stream_in(lcast::exact<const Type*> x) { return shl_char_array(reinterpret_cast<CharT const*>(x.payload)); }
template <class Type>
typename boost::enable_if_c<boost::detail::is_character<Type>::value && sizeof(CharT) == sizeof(Type), bool>::type
stream_in(lcast::exact<Type*> x) { return shl_char_array(reinterpret_cast<CharT*>(x.payload)); }
enable_if_compatible_char_t<Type>
stream_in(lcast::exact<Type*> x) { return shl_char_array(reinterpret_cast<CharT const*>(x.payload)); }
template <class Type>
typename boost::enable_if_c<boost::is_signed<Type>::value && !boost::is_enum<Type>::value, bool>::type
@@ -324,27 +326,28 @@ namespace boost { namespace detail { namespace lcast {
}
template <class C, std::size_t N>
typename boost::enable_if_c<boost::detail::is_character<C>::value && sizeof(CharT) == sizeof(C), bool>::type
enable_if_compatible_char_t<C>
stream_in(lcast::exact<boost::array<C, N>> x) noexcept {
return shl_char_array_limited(reinterpret_cast<const CharT*>(x.payload.data()), N);
}
template <class C, std::size_t N>
typename boost::enable_if_c<boost::detail::is_character<C>::value && sizeof(CharT) == sizeof(C), bool>::type
stream_in(lcast::exact<boost::array<const C, N>> x) noexcept {
return shl_char_array_limited(reinterpret_cast<const CharT*>(x.payload.data()), N);
}
template <class C, std::size_t N>
typename boost::enable_if_c<boost::detail::is_character<C>::value && sizeof(CharT) == sizeof(C), bool>::type
enable_if_compatible_char_t<C>
stream_in(lcast::exact<std::array<C, N>> x) noexcept {
return shl_char_array_limited(reinterpret_cast<const CharT*>(x.payload.data()), N);
}
template <class C, std::size_t N>
typename boost::enable_if_c<boost::detail::is_character<C>::value && sizeof(CharT) == sizeof(C), bool>::type
stream_in(lcast::exact<std::array<const C, N>> x) noexcept {
return shl_char_array_limited(reinterpret_cast<const CharT*>(x.payload.data()), N);
#ifndef BOOST_NO_CXX17_HDR_STRING_VIEW
template <class C>
enable_if_compatible_char_t<C>
stream_in(lcast::exact<std::basic_string_view<C, Traits>> x) noexcept {
return shl_char_array_limited(reinterpret_cast<const CharT*>(x.payload.data()), x.payload.size());
}
#endif
template <class C>
enable_if_compatible_char_t<C>
stream_in(lcast::exact<boost::basic_string_view<C, Traits>> x) noexcept {
return shl_char_array_limited(reinterpret_cast<const CharT*>(x.payload.data()), x.payload.size());
}
};
+1
View File
@@ -58,6 +58,7 @@ test-suite conversion
-<library>/boost/test//boost_unit_test_framework # uses lightweight_test
]
[ run iterator_range_test.cpp ]
[ run string_view_test.cpp ]
[ run arrays_test.cpp : : :
<toolset>msvc:<cxxflags>/wd4512 # assignment operator could not be generated
]
+9
View File
@@ -11,6 +11,7 @@
#include <boost/array.hpp>
#include <boost/container/string.hpp>
#include <boost/range/iterator_range.hpp>
#include <boost/utility/string_view.hpp>
template <class T>
struct is_optimized_stream : boost::false_type {};
@@ -170,6 +171,14 @@ void test_metafunctions()
test_optimized_types_to_wstring<const wchar_t*>();
test_optimized_types_to_wstring<boost::iterator_range<const wchar_t*>>();
test_optimized_types_to_wstring<boost::iterator_range<wchar_t*>>();
test_optimized_types_to_string<boost::string_view>();
test_optimized_types_to_wstring<boost::basic_string_view<wchar_t>>();
#ifndef BOOST_NO_CXX17_HDR_STRING_VIEW
test_optimized_types_to_string<std::string_view>();
test_optimized_types_to_wstring<std::basic_string_view<wchar_t>>();
#endif
}
int main()
+37
View File
@@ -0,0 +1,37 @@
// Unit test for boost::lexical_cast.
//
// See http://www.boost.org for most recent version, including documentation.
//
// Copyright Antony Polukhin, 2012-2024.
//
// 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).
#include <boost/lexical_cast.hpp>
#include <boost/utility/string_view.hpp>
#ifndef BOOST_NO_CXX17_HDR_STRING_VIEW
#include <string_view>
#endif
#include <boost/core/lightweight_test.hpp>
using namespace boost;
int main() {
boost::string_view bsw = "1";
BOOST_TEST_EQ(lexical_cast<std::string>(bsw), "1");
BOOST_TEST_EQ(lexical_cast<int>(bsw), 1);
#ifndef BOOST_NO_CXX17_HDR_STRING_VIEW
std::string_view ssw = "42";
BOOST_TEST_EQ(lexical_cast<std::string>(ssw), "42");
BOOST_TEST_EQ(lexical_cast<int>(ssw), 42);
#endif
return boost::report_errors();
}