15 #ifndef INCG_IRIS_IUTEST_STDLIB_HPP_54D4BEEE_7B6B_4AF4_B1F6_138560480D55_
16 #define INCG_IRIS_IUTEST_STDLIB_HPP_54D4BEEE_7B6B_4AF4_B1F6_138560480D55_
20 #define __STDC_FORMAT_MACROS 1
23 #if defined(IUTEST_USE_GTEST) && defined(__STRICT_ANSI__)
24 # undef __STRICT_ANSI__
28 # define __STRICT_ANSI__
30 #if !defined(_MSC_VER)
38 #if defined(__has_include)
39 # if __has_include(<version>)
40 # define IUTEST_HAS_CXX_HDR_VERSION 1
44 #if !defined(IUTEST_HAS_CXX_HDR_VERSION)
45 # define IUTEST_HAS_CXX_HDR_VERSION 0
48 #if IUTEST_HAS_CXX_HDR_VERSION
54 #if defined(__GLIBCPP__) || defined(__GLIBCXX__)
57 #if defined(__clang__)
58 # if __has_include(<experimental/memory_resource>)
59 # define IUTEST_LIBSTDCXX_VERSION 60100
60 # elif __has_include(<experimental/any>)
61 # define IUTEST_LIBSTDCXX_VERSION 50100
62 # elif __has_include(<shared_mutex>)
63 # define IUTEST_LIBSTDCXX_VERSION 40900
64 # elif __has_include(<ext/cmath>)
65 # define IUTEST_LIBSTDCXX_VERSION 40800
66 # elif __has_include(<scoped_allocator>)
67 # define IUTEST_LIBSTDCXX_VERSION 40700
68 # elif __has_include(<typeindex>)
69 # define IUTEST_LIBSTDCXX_VERSION 40600
70 # elif __has_include(<future>)
71 # define IUTEST_LIBSTDCXX_VERSION 40500
72 # elif __has_include(<ratio>)
73 # define IUTEST_LIBSTDCXX_VERSION 40400
74 # elif __has_include(<array>)
75 # define IUTEST_LIBSTDCXX_VERSION 40300
77 #elif defined(__GNUC__)
78 # define IUTEST_LIBSTDCXX_VERSION (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__)
82 # if IUTEST_LIBSTDCXX_VERSION >= 60100
83 # if !defined(IUTEST_HAS_STD_INVOKE) && IUTEST_HAS_CXX1Z
84 # define IUTEST_HAS_STD_INVOKE 1
87 # if IUTEST_LIBSTDCXX_VERSION >= 50100
88 # if !defined(IUTEST_HAS_CXX_HDR_CODECVT)
89 # define IUTEST_HAS_CXX_HDR_CODECVT 1
92 # if IUTEST_LIBSTDCXX_VERSION >= 40900
93 # if !defined(IUTEST_HAS_CXX_HDR_REGEX)
94 # define IUTEST_HAS_CXX_HDR_REGEX 1
97 # if IUTEST_LIBSTDCXX_VERSION >= 40700
98 # if !defined(IUTEST_HAS_STD_EMPLACE)
99 # define IUTEST_HAS_STD_EMPLACE 1
101 # if !defined(IUTEST_HAS_CXX_HDR_CHRONO)
102 # define IUTEST_HAS_CXX_HDR_CHRONO 1
105 # if IUTEST_LIBSTDCXX_VERSION >= 40600
106 # if !defined(IUTEST_HAS_STD_BEGIN_END)
107 # define IUTEST_HAS_STD_BEGIN_END 1
110 # if IUTEST_LIBSTDCXX_VERSION >= 40500
111 # if !defined(IUTEST_HAS_STD_DECLVAL)
112 # define IUTEST_HAS_STD_DECLVAL 1
114 # if !defined(IUTEST_HAS_CXX_HDR_RANDOM)
115 # define IUTEST_HAS_CXX_HDR_RANDOM 1
117 # if !defined(IUTEST_HAS_CXX_HDR_CSTDINT)
118 # define IUTEST_HAS_CXX_HDR_CSTDINT 1
121 # if IUTEST_LIBSTDCXX_VERSION >= 40300
122 # if !defined(IUTEST_HAS_CXX_HDR_ARRAY)
123 # define IUTEST_HAS_CXX_HDR_ARRAY 1
125 # if !defined(IUTEST_HAS_STD_TUPLE)
126 # define IUTEST_HAS_STD_TUPLE 1
129 # if defined(_GLIBCXX_HAVE_QUICK_EXIT) && defined(_GLIBCXX_HAVE_AT_QUICK_EXIT)
130 # if !defined(IUTEST_HAS_STD_QUICK_EXIT)
131 # define IUTEST_HAS_STD_QUICK_EXIT 1
134 # if defined(__has_include)
135 # if !defined(IUTEST_HAS_CXX_HDR_CUCHAR) && __has_include( <cuchar> )
136 # if defined(_GLIBCXX_USE_C11_UCHAR_CXX11) && _GLIBCXX_USE_C11_UCHAR_CXX11
137 # define IUTEST_HAS_CXX_HDR_CUCHAR 1
143 #if !defined(IUTEST_HAS_STD_TUPLE)
144 # if (!defined(__CUDACC__) && !defined(__ARMCC_VERSION) && (IUTEST_LIBSTDCXX_VERSION >= 40000))
145 # if !defined(IUTEST_HAS_TR1_TUPLE)
146 # define IUTEST_HAS_TR1_TUPLE 1
151 #if !defined(IUTEST_HAS_HDR_CXXABI)
152 # if defined(__has_include)
153 # if __has_include( <cxxabi.h> )
154 # define IUTEST_HAS_HDR_CXXABI 1
157 # define IUTEST_HAS_HDR_CXXABI 1
161 #if defined(__GNUC__) && !defined(__clang__)
164 # define IUTEST_HAS_CXX_HDR_FILESYSTEM 0
168 #elif defined(_LIBCPP_VERSION)
172 # if !defined(IUTEST_HAS_STD_BEGIN_END)
173 # define IUTEST_HAS_STD_BEGIN_END 1
175 # if !defined(IUTEST_HAS_STD_DECLVAL)
176 # define IUTEST_HAS_STD_DECLVAL 1
178 # if !defined(IUTEST_HAS_STD_EMPLACE)
179 # define IUTEST_HAS_STD_EMPLACE 1
181 # if !defined(IUTEST_HAS_CXX_HDR_CHRONO)
182 # define IUTEST_HAS_CXX_HDR_CHRONO 1
184 # if !defined(IUTEST_HAS_CXX_HDR_REGEX)
185 # define IUTEST_HAS_CXX_HDR_REGEX 1
187 # if !defined(IUTEST_HAS_CXX_HDR_RANDOM)
188 # define IUTEST_HAS_CXX_HDR_RANDOM 1
190 # if !defined(IUTEST_HAS_CXX_HDR_CODECVT)
191 # define IUTEST_HAS_CXX_HDR_CODECVT 1
193 # if !defined(IUTEST_HAS_CXX_HDR_CSTDINT)
194 # define IUTEST_HAS_CXX_HDR_CSTDINT 1
196 # if !defined(IUTEST_HAS_CXX_HDR_ARRAY)
197 # define IUTEST_HAS_CXX_HDR_ARRAY 1
199 # if !defined(IUTEST_HAS_STD_QUICK_EXIT) && defined(_LIBCPP_HAS_QUICK_EXIT)
200 # define IUTEST_HAS_STD_QUICK_EXIT 1
202 # if defined(__has_include)
203 # if !defined(IUTEST_HAS_CXX_HDR_CUCHAR) && __has_include( <cuchar> )
204 # define IUTEST_HAS_CXX_HDR_CUCHAR 1
206 # if !defined(IUTEST_HAS_STD_TUPLE) && __has_include( <tuple> )
207 # define IUTEST_HAS_STD_TUPLE 1
212 #if _LIBCPP_VERSION < 9000
213 # define IUTEST_HAS_CXX_HDR_FILESYSTEM 0
215 #if _LIBCPP_VERSION >= 3700
216 # if !defined(IUTEST_HAS_STD_INVOKE) && IUTEST_HAS_CXX1Z
217 # define IUTEST_HAS_STD_INVOKE 1
220 #if _LIBCPP_VERSION >= 1001
221 # if !defined(IUTEST_HAS_STD_BEGIN_END)
222 # define IUTEST_HAS_STD_BEGIN_END 1
226 #if defined(__has_include)
227 # if !defined(IUTEST_HAS_STD_TUPLE) && !defined(IUTEST_HAS_TR1_TUPLE) && __has_include( <tr1/tuple> )
228 # define IUTEST_HAS_TR1_TUPLE 1
230 # if !defined(IUTEST_HAS_HDR_CXXABI) && __has_include( <cxxabi.h> )
231 # define IUTEST_HAS_HDR_CXXABI 1
235 #elif defined(_MSC_VER) && defined(_MSC_FULL_VER)
240 # if !defined(IUTEST_HAS_CXX_HDR_ARRAY)
241 # define IUTEST_HAS_CXX_HDR_ARRAY 1
246 # if !defined(IUTEST_HAS_STD_BEGIN_END)
247 # define IUTEST_HAS_STD_BEGIN_END 1
249 # if !defined(IUTEST_HAS_STD_DECLVAL)
250 # define IUTEST_HAS_STD_DECLVAL IUTEST_HAS_DECLTYPE
252 # if !defined(IUTEST_HAS_STD_EMPLACE)
253 # define IUTEST_HAS_STD_EMPLACE 1
255 # if !defined(IUTEST_HAS_CXX_HDR_REGEX)
256 # define IUTEST_HAS_CXX_HDR_REGEX 1
258 # if !defined(IUTEST_HAS_CXX_HDR_RANDOM)
259 # define IUTEST_HAS_CXX_HDR_RANDOM 1
261 # if !defined(IUTEST_HAS_CXX_HDR_CODECVT)
262 # define IUTEST_HAS_CXX_HDR_CODECVT 1
264 # if !defined(IUTEST_HAS_CXX_HDR_CSTDINT)
265 # define IUTEST_HAS_CXX_HDR_CSTDINT 1
267 # if !defined(IUTEST_HAS_CXX_HDR_CHRONO) && _MSC_FULL_VER != 190023725
268 # define IUTEST_HAS_CXX_HDR_CHRONO 1
273 # if !defined(IUTEST_HAS_STD_QUICK_EXIT)
274 # define IUTEST_HAS_STD_QUICK_EXIT 1
276 # if !defined(IUTEST_HAS_CXX_HDR_CUCHAR)
277 # define IUTEST_HAS_CXX_HDR_CUCHAR 1
282 # if !defined(IUTEST_HAS_CXX_HDR_CHARCONV) && IUTEST_HAS_CXX17
283 # define IUTEST_HAS_CXX_HDR_CHARCONV 1
288 #if (_MSC_VER > 1700) || (_MSC_VER == 1700 && _VARIADIC_MAX >= 9)
289 # if !defined(IUTEST_HAS_STD_TUPLE)
290 # define IUTEST_HAS_STD_TUPLE 1
292 #elif (_MSC_VER >= 1500) && (_MSC_VER < 1700) && (_MSC_FULL_VER > 150021022)
293 # if !defined(IUTEST_HAS_TR1_TUPLE)
294 # define IUTEST_HAS_TR1_TUPLE 1
298 #elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
308 #if defined(__has_include)
310 #if !defined(IUTEST_HAS_CXX_HDR_ANY)
311 # if __has_include(<any>)
312 # define IUTEST_HAS_CXX_HDR_ANY 1
316 #if !defined(IUTEST_HAS_CXX_HDR_CHARCONV)
317 # if __has_include(<charconv>)
318 # define IUTEST_HAS_CXX_HDR_CHARCONV 1
323 #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED)
324 # if __MAC_OS_X_VERSION_MIN_REQUIRED < 101500
325 # define IUTEST_HAS_CXX_HDR_FILESYSTEM 0
329 #if !defined(IUTEST_HAS_CXX_HDR_FILESYSTEM)
330 # if __has_include(<filesystem>)
331 # define IUTEST_HAS_CXX_HDR_FILESYSTEM 1
335 #if !defined(IUTEST_HAS_CXX_HDR_OPTIONAL)
336 # if __has_include(<optional>)
337 # define IUTEST_HAS_CXX_HDR_OPTIONAL 1
341 #if !defined(IUTEST_HAS_CXX_HDR_STRING_VIEW)
342 # if __has_include(<string_view>)
343 # define IUTEST_HAS_CXX_HDR_STRING_VIEW 1
355 #if !defined(IUTEST_HAS_CXX_HDR_VARIANT)
356 # if IUTEST_HAS_VARIADIC_TEMPLATES && defined(__has_include)
357 # if defined(__clang__) && (__clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 6))
358 # define IUTEST_HAS_CXX_HDR_VARIANT 0 // clang 3.5 + variant is not worked
359 # elif __has_include(<variant>)
360 # define IUTEST_HAS_CXX_HDR_VARIANT 1
365 #if defined(IUTEST_HAS_CXX_HDR_CODECVT) && IUTEST_HAS_CXX_HDR_CODECVT
371 #if defined(__has_include)
372 # if defined(IUTEST_HAS_CXX_HDR_CODECVT) && IUTEST_HAS_CXX_HDR_CODECVT
373 # if !__has_include( <codecvt> )
374 # undef IUTEST_HAS_CXX_HDR_CODECVT
381 #if !defined(IUTEST_HAS_CXX_HDR_ANY)
382 # define IUTEST_HAS_CXX_HDR_ANY 0
384 #if !defined(IUTEST_HAS_CXX_HDR_ARRAY)
386 # define IUTEST_HAS_CXX_HDR_ARRAY 0
388 #if !defined(IUTEST_HAS_CXX_HDR_CHARCONV)
390 # define IUTEST_HAS_CXX_HDR_CHARCONV 0
392 #if !defined(IUTEST_HAS_CXX_HDR_CHRONO)
394 # define IUTEST_HAS_CXX_HDR_CHRONO 0
401 #if !defined(IUTEST_HAS_CXX_HDR_CODECVT)
402 # define IUTEST_HAS_CXX_HDR_CODECVT 0
404 #if !defined(IUTEST_HAS_CXX_HDR_CSTDINT)
406 # define IUTEST_HAS_CXX_HDR_CSTDINT 0
408 #if !defined(IUTEST_HAS_CXX_HDR_CUCHAR)
410 # define IUTEST_HAS_CXX_HDR_CUCHAR 0
412 #if !defined(IUTEST_HAS_CXX_HDR_FILESYSTEM)
414 # define IUTEST_HAS_CXX_HDR_FILESYSTEM 0
416 #if !defined(IUTEST_HAS_CXX_HDR_OPTIONAL)
418 # define IUTEST_HAS_CXX_HDR_OPTIONAL 0
420 #if !defined(IUTEST_HAS_CXX_HDR_RANDOM)
422 # define IUTEST_HAS_CXX_HDR_RANDOM 0
424 #if !defined(IUTEST_HAS_CXX_HDR_REGEX)
426 # define IUTEST_HAS_CXX_HDR_REGEX 0
428 #if !defined(IUTEST_HAS_CXX_HDR_STRING_VIEW)
430 # define IUTEST_HAS_CXX_HDR_STRING_VIEW 0
432 #if !defined(IUTEST_HAS_CXX_HDR_VARIANT)
434 # define IUTEST_HAS_CXX_HDR_VARIANT 0
436 #if !defined(IUTEST_HAS_HDR_CXXABI)
438 # define IUTEST_HAS_HDR_CXXABI 0
445 #if IUTEST_HAS_CXX_HDR_ANY
448 #if IUTEST_HAS_CXX_HDR_CSTDINT
451 #if IUTEST_HAS_CXX_HDR_FILESYSTEM
452 # include <filesystem>
454 #if IUTEST_HAS_CXX_HDR_OPTIONAL
457 #if IUTEST_HAS_CXX_HDR_VARIANT
460 #if IUTEST_HAS_CXX_HDR_CHARCONV
466 #if !defined(IUTEST_HAS_STD_FILESYSTEM)
467 # if defined(ANDROID) || defined(__ANDROID__)
468 # define IUTEST_HAS_STD_FILESYSTEM 0
469 # elif IUTEST_HAS_CXX_HDR_FILESYSTEM && defined(__cpp_lib_filesystem) && __cpp_lib_filesystem >= 201703
470 # if !defined(__cpp_lib_experimental_filesystem)
471 # define IUTEST_HAS_STD_FILESYSTEM 1
476 #if !defined(IUTEST_HAS_STD_TO_CHARS)
477 # if defined(__cpp_lib_to_chars) && __cpp_lib_to_chars >= 201611
478 # define IUTEST_HAS_STD_TO_CHARS 1
485 #if !defined(IUTEST_HAS_STD_BEGIN_END)
486 # define IUTEST_HAS_STD_BEGIN_END 0
488 #if !defined(IUTEST_HAS_STD_DECLVAL)
490 # define IUTEST_HAS_STD_DECLVAL 0
492 #if !defined(IUTEST_HAS_STD_EMPLACE)
494 # define IUTEST_HAS_STD_EMPLACE 0
496 #if !defined(IUTEST_HAS_STD_FILESYSTEM)
498 # define IUTEST_HAS_STD_FILESYSTEM 0
500 #if !defined(IUTEST_HAS_STD_INVOKE)
502 # define IUTEST_HAS_STD_INVOKE 0
504 #if !defined(IUTEST_HAS_STD_QUICK_EXIT)
506 # define IUTEST_HAS_STD_QUICK_EXIT 0
508 #if !defined(IUTEST_HAS_STD_TO_CHARS)
510 # define IUTEST_HAS_STD_TO_CHARS 0
514 #if !defined(IUTEST_USE_EXTERNAL_TR1_TUPLE)
515 # define IUTEST_USE_EXTERNAL_TR1_TUPLE 0
517 #ifndef IUTEST_USE_EXTERNAL_STD_TUPLE
519 # define IUTEST_USE_EXTERNAL_STD_TUPLE 0
521 #if !defined(IUTEST_HAS_STD_TUPLE)
523 # define IUTEST_HAS_STD_TUPLE 0
525 #if !defined(IUTEST_HAS_TR1_TUPLE)
527 # define IUTEST_HAS_TR1_TUPLE 0
529 #if IUTEST_HAS_STD_TUPLE || IUTEST_HAS_TR1_TUPLE || IUTEST_USE_EXTERNAL_TR1_TUPLE || IUTEST_USE_EXTERNAL_STD_TUPLE
531 # if !defined(IUTEST_HAS_TUPLE)
532 # define IUTEST_HAS_TUPLE 1
535 # if defined(IUTEST_HAS_TUPLE)
536 # undef IUTEST_HAS_TUPLE
538 # define IUTEST_HAS_TUPLE 0
540 #if !defined(IUTEST_HAS_VARIADIC_TUPLES) && IUTEST_HAS_VARIADIC_TEMPLATES && IUTEST_HAS_TUPLE && IUTEST_HAS_STD_TUPLE
541 # if defined(__clang__)
542 # if (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ > 7))
543 # define IUTEST_HAS_VARIADIC_TUPLES 1
546 # define IUTEST_HAS_VARIADIC_TUPLES 1
549 #if !defined(IUTEST_HAS_VARIADIC_TUPLES)
550 # define IUTEST_HAS_VARIADIC_TUPLES 0
558 #if !defined(IUTEST_HAS_STD_STR_TO_VALUE)
559 # if IUTEST_HAS_CXX11
560 # if defined(IUTEST_OS_WINDOWS_MINGW)
561 # if defined(__MINGW64__) && (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)))
562 # define IUTEST_HAS_STD_STR_TO_VALUE 1
565 # define IUTEST_HAS_STD_STR_TO_VALUE 1
570 #if !defined(IUTEST_HAS_STD_STR_TO_VALUE)
571 # define IUTEST_HAS_STD_STR_TO_VALUE 0
575 #if !defined(IUTEST_USING_BEGIN_END)
576 # if IUTEST_HAS_STD_BEGIN_END
577 # define IUTEST_USING_BEGIN_END() \
578 using ::std::begin; using ::std::end
580 # define IUTEST_USING_BEGIN_END() \
581 using ::iutest::detail::cxx::begin; using ::iutest::detail::cxx::end
590 #if IUTEST_HAS_STD_BEGIN_END
597 template<
typename T>
typename T::iterator begin(T& x) {
return x.begin(); }
598 template<
typename T>
typename T::iterator end (T& x) {
return x.end(); }
600 template<
typename T>
typename T::const_iterator begin(
const T& x) {
return x.begin(); }
601 template<
typename T>
typename T::const_iterator end (
const T& x) {
return x.end(); }
603 #if !defined(IUTEST_NO_FUNCTION_TEMPLATE_ORDERING)
604 template<
typename T,
size_t SIZE> T* begin(T (&x)[SIZE]) {
return &x[0]; }
605 template<
typename T,
size_t SIZE> T* end (T (&x)[SIZE]) {
return begin(x) + SIZE; }
607 template<
typename T,
size_t SIZE>
const T* begin(
const T (&x)[SIZE]) {
return &x[0]; }
608 template<
typename T,
size_t SIZE>
const T* end (
const T (&x)[SIZE]) {
return begin(x) + SIZE; }
618 #if !IUTEST_USE_EXTERNAL_STD_TUPLE && !IUTEST_USE_EXTERNAL_TR1_TUPLE
619 # if IUTEST_HAS_STD_TUPLE
621 # elif IUTEST_HAS_TR1_TUPLE
622 # if (defined(__GNUC__) && (__GNUC__ >= 4))
623 # include <tr1/tuple>
634 #if IUTEST_HAS_STD_TUPLE
635 namespace alias = ::std;
636 #elif IUTEST_HAS_TR1_TUPLE
637 namespace alias = ::std::tr1;
641 using alias::tuple_element;
642 using alias::make_tuple;
645 template<
typename T>
struct tuple_size :
public alias::tuple_size<T> {};
646 template<
typename T>
struct tuple_size<const T> :
public alias::tuple_size<T> {};
647 template<
typename T>
struct tuple_size<volatile T> :
public alias::tuple_size<T>{};
648 template<
typename T>
struct tuple_size<const volatile T> :
public alias::tuple_size<T>{};
653 template<
typename T,
typename F,
int Begin>
654 struct tuple_foreach_impl
656 template<
int N,
int I>
659 static void do_something(T& t, F fn)
662 impl<N, I + 1>::do_something(t, fn);
668 static void do_something(T&, F) {}
671 static void do_something(T& t, F fn)
673 impl<tuple_size<T>::value, Begin>::do_something(t, fn);
677 template<
typename T,
typename U>
678 struct tuple_cast_copy_impl
680 template<
int N,
int I>
683 static void copy(T& dst,
const U& src)
685 get<I>(dst) =
static_cast<typename tuple_element<I, T>::type
>(get<I>(src));
686 impl<N, I + 1>::copy(dst, src);
692 static void copy(T&,
const U&) {}
695 static void copy(T& dst,
const U& src)
697 impl<tuple_size<T>::value, 0>::copy(dst, src);
703 template<
int I,
typename tuple_t,
typename F>
704 void tuple_foreach(tuple_t& t, F& fn)
706 detail::tuple_foreach_impl<tuple_t, F&, I>::do_something(t, fn);
708 template<
typename tuple_t,
typename F>
709 void tuple_foreach(tuple_t& t, F& fn)
711 tuple_foreach<0>(t, fn);
713 template<
int I,
typename tuple_t,
typename F>
714 void tuple_foreach(tuple_t& t,
const F& fn)
716 detail::tuple_foreach_impl<tuple_t, const F&, I>::do_something(t, fn);
718 template<
typename tuple_t,
typename F>
719 void tuple_foreach(tuple_t& t,
const F& fn)
721 tuple_foreach<0>(t, fn);
723 template<
typename T,
typename U>
724 void tuple_cast_copy(T& dst,
const U& src)
726 detail::tuple_cast_copy_impl<T, U>::copy(dst, src);
732 using tuples::tuple_size;
733 using tuples::tuple_element;
734 using tuples::tuple_foreach;
735 using tuples::make_tuple;
743 #if !defined(IUTEST_HAS_HDR_SYSTIME)
744 # if defined(IUTEST_OS_WINDOWS) && !defined(IUTEST_OS_WINDOWS_MINGW) && !defined(IUTEST_OS_WINDOWS_WINE)
745 # define IUTEST_HAS_HDR_SYSTIME 0
749 #if !defined(IUTEST_HAS_HDR_SYSTIME)
750 # define IUTEST_HAS_HDR_SYSTIME 1
754 #if defined(IUTEST_OS_WINDOWS_WINE)
755 # define __socklen_t_defined
759 #if !defined(IUTEST_HAS_STRINGSTREAM)
760 # if !defined(_STLP_NO_IOSTREAMS)
761 # define IUTEST_HAS_STRINGSTREAM 1
765 #if !defined(IUTEST_HAS_STRINGSTREAM)
766 # define IUTEST_HAS_STRINGSTREAM 0
775 #if !defined(IUTEST_HAS_STRSTREAM)
776 # define IUTEST_HAS_STRSTREAM 0
780 #if !defined(IUTEST_HAS_IOMANIP)
781 # if IUTEST_HAS_STRINGSTREAM || IUTEST_HAS_STRSTREAM
782 # define IUTEST_HAS_IOMANIP 1
786 #if !defined(IUTEST_HAS_IOMANIP)
787 # define IUTEST_HAS_IOMANIP 0
792 #if !defined(IUTEST_HAS_INVALID_PARAMETER_HANDLER)
793 # if IUTEST_HAS_EXCEPTIONS && (defined(_MSC_VER) && (_MSC_VER >= 1400)) && !defined(IUTEST_OS_WINDOWS_MOBILE)
794 # define IUTEST_HAS_INVALID_PARAMETER_HANDLER 1
798 #if !defined(IUTEST_HAS_INVALID_PARAMETER_HANDLER)
799 # define IUTEST_HAS_INVALID_PARAMETER_HANDLER 0
804 # if defined(_MSC_VER) && (_MSC_VER < 1900)
806 # elif defined(IUTEST_OS_WINDOWS_MINGW)
807 # if !defined(__STRICT_ANSI__)
808 # if defined(__MINGW64__)
809 # define IUPRzu PRIu64
810 # elif defined(__MINGW32__)
811 # define IUPRzu PRIu32
821 #if !defined(iu_va_copy)
822 # if defined(va_copy)
823 # define iu_va_copy va_copy
824 # elif defined(__GNUC__) || defined(__clang__)
825 # define iu_va_copy(dest, src) __builtin_va_copy(dest, src)
827 # define iu_va_copy(dest, src) (dest = src)
841 struct type_least_t {};
845 struct type_least_t<1>
847 #if defined(INT_LEAST8_MIN)
848 typedef int_least8_t Int;
849 typedef uint_least8_t UInt;
852 typedef unsigned char UInt;
858 struct type_least_t<2>
860 #if defined(INT_LEAST16_MIN)
861 typedef int_least16_t Int;
862 typedef uint_least16_t UInt;
865 typedef unsigned short UInt;
871 struct type_least_t<4>
873 #if defined(INT_LEAST32_MIN)
874 typedef int_least32_t Int;
875 typedef uint_least32_t UInt;
878 typedef unsigned int UInt;
884 struct type_least_t<8>
886 #if defined(INT_LEAST64_MIN)
887 typedef int_least64_t Int;
888 typedef uint_least64_t UInt;
890 #if defined(_MSC_VER)
892 typedef unsigned __int64 UInt;
894 typedef long long Int;
895 typedef unsigned long long UInt;
903 template<
size_t SIZE>
904 struct type_fit_t {};
910 #if defined(INT8_MIN)
912 typedef uint8_t UInt;
915 typedef unsigned char UInt;
923 #if defined(INT16_MIN)
925 typedef uint16_t UInt;
928 typedef unsigned short UInt;
936 #if defined(INT32_MIN)
938 typedef uint32_t UInt;
940 #if !defined(IUTEST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
942 template<
typename T,
typename F,
bool b>
943 struct impl {
typedef T type; };
944 template<
typename T,
typename F>
945 struct impl<T, F, false> {
typedef F type; };
948 typedef impl<long, int
949 ,
sizeof(int) != 4 &&
sizeof(
long) == 4>::type Int;
950 typedef impl<
unsigned long,
unsigned int
951 ,
sizeof(int) != 4 &&
sizeof(
long) == 4>::type UInt;
954 typedef unsigned int UInt;
963 #if defined(INT64_MIN)
965 typedef uint64_t UInt;
967 #if defined(_MSC_VER)
969 typedef unsigned __int64 UInt;
971 typedef long long Int;
972 typedef unsigned long long UInt;
979 struct type_fit_t<16>
981 #if IUTEST_HAS_INT128
982 #if defined(_MSC_VER)
983 typedef __int128 Int;
984 typedef unsigned __int128 UInt;
986 typedef __int128_t Int;
987 typedef __uint128_t UInt;
998 inline int iu_mbtowc(
wchar_t* dst,
const char* src,
size_t size)
1000 #if defined(IUTEST_OS_LINUX_ANDROID) || defined(IUTEST_OS_WINDOWS_MOBILE)
1002 IUTEST_UNUSED_VAR(dst);
1003 IUTEST_UNUSED_VAR(src);
1004 IUTEST_UNUSED_VAR(size);
1007 return mbtowc(dst, src, size);
1014 #endif // INCG_IRIS_IUTEST_STDLIB_HPP_54D4BEEE_7B6B_4AF4_B1F6_138560480D55_