6#if !defined(__XTD_TUNIT_INTERNAL__)
7#error "Do not include this file: Internal use only"
16#include <forward_list>
17#include <initializer_list>
28#include <unordered_map>
29#include <unordered_set>
32#include <xtd/optional>
33#include <xtd/target_id>
35#include <xtd/stream_insertable>
38template<
class value_t>
40inline static void __print(std::ostream& os,
const value_t& value) {
44template<
class value_t>
46inline static void __print(std::ostream& os,
const value_t& value) {
47 auto size = std::min(
sizeof(value),
size_t {32});
48 os <<
size <<
"-byte object <";
49 for (
size_t index = 0; index !=
size; index++)
50 os << (index != 0 ? (index % 2 == 0 ?
" " :
"-") :
"") << std::hex << std::setiosflags(std::ios_base::uppercase) << std::setw(2) << std::setfill('0') << static_cast<int>(
reinterpret_cast<const unsigned char*
>(&value)[index]) << std::resetiosflags(std::ios_base::dec) << std::dec;
51 os << (
size <
sizeof(value) ?
"-..." :
"") <<
">";
54template<
class value_t>
55inline static void __print(std::ostream& os, value_t* value) {
59template<
class value_t>
60inline static void __print(std::ostream& os,
const value_t* value) {
64template<
class char_t,
class char_traits_t,
class value_t>
65struct __tunit_value_printer {
66 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const value_t*& value) {
69 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const value_t*
const& value) {
72 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const value_t& value) {
77template<
class char_t,
class char_traits_t>
78struct __tunit_value_printer<char_t, char_traits_t, std::exception> {
79 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::exception& value) {
80 os <<
"exception: " << value.what();
84template<
class char_t,
class char_traits_t,
class value_t>
85struct __tunit_value_printer<char_t, char_traits_t, std::
optional<value_t>> {
86 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::optional<value_t>& value) {
87 if (!value.has_value())
91 __tunit_value_printer<char_t, char_traits_t, value_t>::print(os, value.value());
97template<
class char_t,
class char_traits_t>
98struct __tunit_value_printer<char_t, char_traits_t, std::
string> {
99 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::string & value) {
104template<
class char_t,
class char_traits_t>
105struct __tunit_value_printer<char_t, char_traits_t,
xtd::
string> {
106 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::string & value) {
111template<
class char_t,
class char_traits_t>
112struct __tunit_value_printer<char_t, char_traits_t, std::
u8string> {
113 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::u8string & value) {
114 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value.c_str());
118template<
class char_t,
class char_traits_t>
119struct __tunit_value_printer<char_t, char_traits_t, std::
u16string> {
120 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::u16string & value) {
121 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value.c_str());
125template<
class char_t,
class char_traits_t>
126struct __tunit_value_printer<char_t, char_traits_t, std::
u32string> {
127 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::u32string & value) {
128 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value.c_str());
132template<
class char_t,
class char_traits_t>
133struct __tunit_value_printer<char_t, char_traits_t, std::
wstring> {
134 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::wstring & value) {
135 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value.c_str());
139template<
class char_t,
class char_traits_t>
140struct __tunit_value_printer<char_t, char_traits_t, const char*> {
141 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const char*
const & value) {
145 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const char*& value) {
149 static void print(std::basic_ostream<char_t, char_traits_t>& os,
char value) {
154template<
class char_t,
class char_traits_t>
155struct __tunit_value_printer<char_t, char_traits_t, char> {
156 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const char*
const & value) {
160 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const char*& value) {
164 static void print(std::basic_ostream<char_t, char_traits_t>& os,
char value) {
169template<
class char_t,
class char_traits_t>
170struct __tunit_value_printer<char_t, char_traits_t, const
xtd::
char8*> {
171 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char8*
const & value) {
173 for (
size_t index = 0; value[index] !=
'\0'; index++)
174 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value[index]);
178 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char8*& value) {
180 for (
size_t index = 0; value[index] !=
'\0'; index++)
181 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value[index]);
185 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char8 value) {
186 if (
static_cast<int>(value) <= 0xFF)
187 os << static_cast<char>(value);
189 os <<
"\\x" << std::hex << static_cast<int>(value);
193template<
class char_t,
class char_traits_t>
194struct __tunit_value_printer<char_t, char_traits_t,
xtd::
char8> {
195 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char8*
const & value) {
197 for (
size_t index = 0; value[index] !=
'\0'; index++)
198 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value[index]);
202 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char8*& value) {
204 for (
size_t index = 0; value[index] !=
'\0'; index++)
205 __tunit_value_printer<char_t, char_traits_t, xtd::char8>::print(os, value[index]);
209 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char8 value) {
210 os << static_cast<char>(value);
214template<
class char_t,
class char_traits_t>
215struct __tunit_value_printer<char_t, char_traits_t, const
xtd::
char16*> {
216 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char16*
const & value) {
218 for (
size_t index = 0; value[index] !=
'\0'; index++)
219 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value[index]);
223 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char16*& value) {
225 for (
size_t index = 0; value[index] != L
'\0'; index++)
226 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value[index]);
230 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char16 value) {
232 os << static_cast<char>(value);
234 os <<
"\\x" << std::hex << static_cast<int>(value);
238template<
class char_t,
class char_traits_t>
239struct __tunit_value_printer<char_t, char_traits_t,
xtd::
char16> {
240 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char16*
const & value) {
242 for (
size_t index = 0; value[index] != L
'\0'; index++)
243 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value[index]);
247 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char16*& value) {
249 for (
size_t index = 0; value[index] != L
'\0'; index++)
250 __tunit_value_printer<char_t, char_traits_t, xtd::char16>::print(os, value[index]);
254 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char16 value) {
256 os << static_cast<char>(value);
258 os <<
"\\x" << std::hex << static_cast<int>(value);
262template<
class char_t,
class char_traits_t>
263struct __tunit_value_printer<char_t, char_traits_t, const
xtd::
char32*> {
264 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char32*
const & value) {
266 for (
size_t index = 0; value[index] != L
'\0'; index++)
267 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value[index]);
271 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char32*& value) {
273 for (
size_t index = 0; value[index] != L
'\0'; index++)
274 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value[index]);
278 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char32 value) {
280 os << static_cast<char>(value);
282 os <<
"\\x" << std::hex << static_cast<int>(value);
286template<
class char_t,
class char_traits_t>
287struct __tunit_value_printer<char_t, char_traits_t,
xtd::
char32> {
288 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char32*
const & value) {
290 for (
size_t index = 0; value[index] != L
'\0'; index++)
291 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value[index]);
295 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const xtd::char32*& value) {
297 for (
size_t index = 0; value[index] != L
'\0'; index++)
298 __tunit_value_printer<char_t, char_traits_t, xtd::char32>::print(os, value[index]);
302 static void print(std::basic_ostream<char_t, char_traits_t>& os,
xtd::char32 value) {
304 os << static_cast<char>(value);
306 os <<
"\\x" << std::hex << static_cast<int>(value);
310template<
class char_t,
class char_traits_t>
311struct __tunit_value_printer<char_t, char_traits_t, const wchar_t*> {
312 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const wchar_t*
const & value) {
314 for (
size_t index = 0; value[index] != L
'\0'; index++)
315 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value[index]);
319 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const wchar_t*& value) {
321 for (
size_t index = 0; value[index] != L
'\0'; index++)
322 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value[index]);
326 static void print(std::basic_ostream<char_t, char_traits_t>& os,
wchar_t value) {
328 os << static_cast<char>(value);
330 os <<
"\\x" << std::hex << static_cast<int>(value);
334template<
class char_t,
class char_traits_t>
335struct __tunit_value_printer<char_t, char_traits_t, wchar_t> {
336 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const wchar_t*
const & value) {
338 for (
size_t index = 0; value[index] != L
'\0'; index++)
339 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value[index]);
343 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const wchar_t*& value) {
345 for (
size_t index = 0; value[index] != L
'\0'; index++)
346 __tunit_value_printer<char_t, char_traits_t, wchar_t>::print(os, value[index]);
350 static void print(std::basic_ostream<char_t, char_traits_t>& os,
wchar_t value) {
352 os << static_cast<char>(value);
354 os <<
"\\x" << std::hex << static_cast<int>(value);
358template<
class char_t,
class char_traits_t,
class type1_t,
class type2_t>
359struct __tunit_value_printer<char_t, char_traits_t, std::pair<type1_t, type2_t>> {
360 static void print(std::basic_ostream<char_t, char_traits_t>& os,
const std::pair<type1_t, type2_t>& value) {
362 __tunit_value_printer<char_t, char_traits_t, type1_t>::print(os, value.first);
364 __tunit_value_printer<char_t, char_traits_t, type2_t>::print(os, value.second);
369template<
class char_t,
class char_traits_t,
class type_t,
unsigned N,
unsigned Last>
370struct __tuple_printer {
371 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const type_t& value) {
372 __tunit_value_printer < char_t, char_traits_t, typename std::tuple_element < N, type_t>::type>::print(os, std::get < N > (value));
374 __tuple_printer < char_t, char_traits_t, type_t, N + 1, Last >::print(os, value);
378template <
class char_t,
class char_traits_t,
class type_t,
unsigned N >
379struct __tuple_printer < char_t, char_traits_t, type_t, N, N > {
380 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const type_t& value) {
381 __tunit_value_printer < char_t, char_traits_t, typename std::tuple_element < N, type_t>::type>::print(os, std::get < N > (value));
385template <
class char_t,
class char_traits_t,
class ...types_t >
386struct __tunit_value_printer < char_t, char_traits_t, std::tuple < types_t ...>> {
387 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::tuple < types_t ... >& value) {
389 __tuple_printer < char_t, char_traits_t, std::tuple < types_t ...>, 0,
sizeof...(types_t) - 1 >::print(os, value);
394template <
class char_t,
class char_traits_t >
395struct __tunit_value_printer < char_t, char_traits_t, std::tuple < >> {
396 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::tuple < >&) {
401template <
class char_t,
class char_traits_t,
class iterator_t >
402std::basic_ostream < char_t, char_traits_t >& __print_sequence_container(std::basic_ostream < char_t, char_traits_t >& os,
const iterator_t& begin,
const iterator_t& end) {
405 for (iterator_t it = begin; it !=
end; ++it) {
406 if (!first) os <<
", ";
407 __tunit_value_printer < char_t, char_traits_t, typename std::iterator_traits < iterator_t>::value_type >::print(os, *it);
413template <
class char_t,
class char_traits_t,
class value_t,
size_t Size >
414struct __tunit_value_printer < char_t, char_traits_t, std::array < value_t, Size>> {
415 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::array < value_t, Size >& values) {
416 __print_sequence_container(os, values.begin(), values.end());
420template <
class char_t,
class char_traits_t,
class value_t >
421struct __tunit_value_printer < char_t, char_traits_t, std::deque < value_t>> {
422 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::deque < value_t >& values) {
423 __print_sequence_container(os, values.begin(), values.end());
427template <
class char_t,
class char_traits_t,
class value_t >
428struct __tunit_value_printer < char_t, char_traits_t, std::forward_list < value_t>> {
429 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::forward_list < value_t >& values) {
430 __print_sequence_container(os, values.begin(), values.end());
434template <
class char_t,
class char_traits_t,
class value_t >
435struct __tunit_value_printer < char_t, char_traits_t, std::list < value_t>> {
436 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::list < value_t >& values) {
437 __print_sequence_container(os, values.begin(), values.end());
441template <
class char_t,
class char_traits_t,
class value_t >
442struct __tunit_value_printer < char_t, char_traits_t, std::initializer_list < value_t>> {
443 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::initializer_list < value_t >& values) {
444 __print_sequence_container(os, values.begin(), values.end());
448template <
class char_t,
class char_traits_t,
class value_t >
449struct __tunit_value_printer < char_t, char_traits_t, std::vector < value_t>> {
450 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::vector < value_t >& values) {
451 __print_sequence_container(os, values.begin(), values.end());
455template <
class char_t,
class char_traits_t,
class iterator_t >
456std::basic_ostream < char_t, char_traits_t >& __print_associative_container(std::basic_ostream < char_t, char_traits_t >& os,
const iterator_t& begin,
const iterator_t& end) {
459 for (iterator_t it = begin; it !=
end; ++it) {
460 if (!first) os <<
", ";
461 __tunit_value_printer < char_t, char_traits_t, typename std::iterator_traits < iterator_t>::value_type >::print(os, *it);
467template <
class char_t,
class char_traits_t,
class key_t,
class value_t >
468struct __tunit_value_printer < char_t, char_traits_t, std::map < key_t, value_t>> {
469 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::map < key_t, value_t >& values) {
470 __print_associative_container(os, values.begin(), values.end());
474template <
class char_t,
class char_traits_t,
class key_t,
class value_t >
475struct __tunit_value_printer < char_t, char_traits_t, std::multimap < key_t, value_t>> {
476 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::multimap < key_t, value_t >& values) {
477 __print_associative_container(os, values.begin(), values.end());
481template <
class char_t,
class char_traits_t,
class value_t >
482struct __tunit_value_printer < char_t, char_traits_t, std::multiset < value_t>> {
483 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::multiset < value_t >& values) {
484 __print_associative_container(os, values.begin(), values.end());
488template <
class char_t,
class char_traits_t,
class value_t >
489struct __tunit_value_printer < char_t, char_traits_t, std::set < value_t>> {
490 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::set < value_t >& values) {
491 __print_associative_container(os, values.begin(), values.end());
495template <
class char_t,
class char_traits_t,
class key_t,
class value_t >
496struct __tunit_value_printer < char_t, char_traits_t, std::unordered_map < key_t, value_t>> {
497 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::unordered_map < key_t, value_t >& values) {
498 __print_associative_container(os, values.begin(), values.end());
502template <
class char_t,
class char_traits_t,
class key_t,
class value_t >
503struct __tunit_value_printer < char_t, char_traits_t, std::unordered_multimap < key_t, value_t>> {
504 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::unordered_multimap < key_t, value_t >& values) {
505 __print_associative_container(os, values.begin(), values.end());
509template <
class char_t,
class char_traits_t,
class value_t >
510struct __tunit_value_printer < char_t, char_traits_t, std::unordered_multiset < value_t>> {
511 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::unordered_multiset < value_t >& values) {
512 __print_associative_container(os, values.begin(), values.end());
516template <
class char_t,
class char_traits_t,
class value_t >
517struct __tunit_value_printer < char_t, char_traits_t, std::unordered_set < value_t>> {
518 static void print(std::basic_ostream < char_t, char_traits_t >& os,
const std::unordered_set < value_t >& values) {
519 __print_associative_container(os, values.begin(), values.end());
523#if __XTD_CURRENT_TARGET_ID__ == __XTD_TARGET_ID_TEST_APPLICATION__
524template <
class char_t,
class char_traits_t,
class type_t >
525std::basic_ostream < char_t, char_traits_t >& operator <<(std::basic_ostream < char_t, char_traits_t >& os,
const type_t& value) {
526 __tunit_value_printer < char_t, char_traits_t, type_t >::print(os, value);
530template <
class char_t,
class char_traits_t,
class type_t >
531std::basic_ostream < char_t, char_traits_t >& operator <<(std::basic_ostream < char_t, char_traits_t >& os,
const type_t* value) {
532 __tunit_value_printer < char_t, char_traits_t, type_t >::print(os, value);
536template <
class char_t,
class char_traits_t,
class type_t >
537std::basic_ostream < char_t, char_traits_t >& operator <<(std::basic_ostream < char_t, char_traits_t >& os, type_t* value) {
538 __tunit_value_printer < char_t, char_traits_t, type_t >::print(os, value);
543inline std::string __tunit_codepoint_to_string(
xtd::char32 codepoint) {
545 if (codepoint < 0x80)
546 result.push_back(
static_cast < char > (codepoint));
547 else if (codepoint < 0x800) {
548 result.push_back(
static_cast < char > ((codepoint >> 6) | 0xc0));
549 result.push_back(
static_cast < char > ((codepoint & 0x3f) | 0x80));
550 }
else if (codepoint < 0x10000) {
551 result.push_back(
static_cast < char > ((codepoint >> 12) | 0xe0));
552 result.push_back(
static_cast < char > (((codepoint >> 6) & 0x3f) | 0x80));
553 result.push_back(
static_cast < char > ((codepoint & 0x3f) | 0x80));
555 result.push_back(
static_cast < char > ((codepoint >> 18) | 0xf0));
556 result.push_back(
static_cast < char > (((codepoint >> 12) & 0x3f) | 0x80));
557 result.push_back(
static_cast < char > (((codepoint >> 6) & 0x3f) | 0x80));
558 result.push_back(
static_cast < char > ((codepoint & 0x3f) | 0x80));
564 std::stringstream ss;
570 std::stringstream ss;
576 std::stringstream ss;
581inline xtd::string __tunit_to_string(
const wchar_t& value) {
582 std::stringstream ss;
587inline xtd::string __tunit_to_string(
const std::string& value) {
588 std::stringstream ss;
594 std::stringstream ss;
595 ss << value.quoted().
chars();
599inline xtd::string __tunit_to_string(
const std::u8string& value) {
600 std::stringstream ss;
605inline xtd::string __tunit_to_string(
const std::u16string& value) {
608 for (
auto codepoint : value)
609 result += __tunit_codepoint_to_string(codepoint);
614inline xtd::string __tunit_to_string(
const std::u32string& value) {
617 for (
auto codepoint : value)
618 result += __tunit_codepoint_to_string(codepoint);
623inline xtd::string __tunit_to_string(
const std::wstring& value) {
626 for (
auto codepoint : value)
627 result += __tunit_codepoint_to_string(codepoint);
632inline xtd::string __tunit_to_string(
const void* value) {
633 std::stringstream ss;
634 ss <<
"\"" <<
reinterpret_cast < xtd::intptr > (value) <<
"\"";
639 std::stringstream ss;
640 ss <<
"\"" <<
reinterpret_cast < xtd::intptr > (value) <<
"\"";
644inline xtd::string __tunit_to_string(
const char* value) {
645 std::stringstream ss;
651 return __tunit_to_string(std::u8string(value));
655 return __tunit_to_string(std::u16string(value));
659 return __tunit_to_string(std::u32string(value));
662inline xtd::string __tunit_to_string(
const wchar_t* value) {
663 return __tunit_to_string(std::wstring(value));
666template <
class value_t >
667inline xtd::string __tunit_to_string(
const value_t& value) {
668 std::stringstream ss;
673template <
class value_t >
674inline xtd::string __tunit_to_string(
const value_t* value) {
675 std::stringstream ss;
676 ss << reinterpret_cast < xtd::intptr > (value);
680template <
class value_t >
681inline xtd::string __tunit_to_string(value_t* value) {
682 std::stringstream ss;
683 ss << reinterpret_cast < xtd::intptr > (value);
const base_type & chars() const noexcept
Returns a reference to the underlying base type.
Definition basic_string.hpp:354
Definition stream_insertable.hpp:30
xtd::basic_string< xtd::char8 > u8string
Represents text as a sequence of UTF-8 code units.
Definition __string_definitions.hpp:76
xtd::basic_string< xtd::char32 > u32string
Represents text as a sequence of UTF-32 code units.
Definition __string_definitions.hpp:65
xtd::basic_string< char > string
Represents text as a sequence of UTF-8 code units.
Definition __string_definitions.hpp:43
xtd::basic_string< xtd::char16 > u16string
Represents text as a sequence of UTF-16 code units.
Definition __string_definitions.hpp:54
xtd::basic_string< xtd::wchar > wstring
Represents text as a sequence of UTF-16 code unit on Windows or UTF-32 code unit on non-Windows syste...
Definition __string_definitions.hpp:87
size_t size
Represents a size of any object in bytes.
Definition size.hpp:23
char8_t char8
Represents a 8-bit unicode character.
Definition char8.hpp:26
std::intmax_t intptr
Represent a pointer or a handle.
Definition intptr.hpp:23
char16_t char16
Represents a 16-bit unicode character.
Definition char16.hpp:26
std::optional< type_t > optional
Represents the optional alias on std::optional.
Definition optional.hpp:26
char32_t char32
Represents a 32-bit unicode character.
Definition char32.hpp:23
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
read_only_span< type_t, count > first() const
Obtains a subspan consisting of the first count elements of the sequence.
Definition read_only_span.hpp:282
const_iterator end() const
Returns an iterator to the end.
Definition read_only_span.hpp:213
void print(FILE *file, arg_t &&value)
Writes the text representation of the specified value to the file output stream.
Definition print.hpp:19