1abb5dd6eSMark de Wever //===----------------------------------------------------------------------===// 2abb5dd6eSMark de Wever // 3abb5dd6eSMark de Wever // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4abb5dd6eSMark de Wever // See https://llvm.org/LICENSE.txt for license information. 5abb5dd6eSMark de Wever // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6abb5dd6eSMark de Wever // 7abb5dd6eSMark de Wever //===----------------------------------------------------------------------===// 8abb5dd6eSMark de Wever 9abb5dd6eSMark de Wever // UNSUPPORTED: c++03, c++11, c++14 10abb5dd6eSMark de Wever 116c4267fbSMichael Jones // TODO Investigate why this fails 126c4267fbSMichael Jones // UNSUPPORTED: windows 136c4267fbSMichael Jones 14*a9882bdaSLouis Dionne // This test times out under msan 15*a9882bdaSLouis Dionne // UNSUPPORTED: msan 16*a9882bdaSLouis Dionne 17b7042b73SLouis Dionne // to_chars requires functions in the dylib that have not been introduced in older 18b7042b73SLouis Dionne // versions of the dylib on macOS. 19f0fc8c48SLouis Dionne // XFAIL: availability-fp_to_chars-missing 20abb5dd6eSMark de Wever 21abb5dd6eSMark de Wever // steady_clock requires threads. 22a7f9895cSLouis Dionne // UNSUPPORTED: no-threads 23a7f9895cSLouis Dionne // UNSUPPORTED: no-random-device 24a7f9895cSLouis Dionne // UNSUPPORTED: no-localization 25abb5dd6eSMark de Wever 26abb5dd6eSMark de Wever // XFAIL: LIBCXX-AIX-FIXME 27abb5dd6eSMark de Wever 28abb5dd6eSMark de Wever // <charconv> 29abb5dd6eSMark de Wever 30abb5dd6eSMark de Wever #include <type_traits> 316c4267fbSMichael Jones #include "test_macros.h" 32abb5dd6eSMark de Wever 33abb5dd6eSMark de Wever // Work-around for sprintf_s's usage in the Microsoft tests. 34abb5dd6eSMark de Wever #ifndef _WIN32 35abb5dd6eSMark de Wever # define sprintf_s snprintf 36abb5dd6eSMark de Wever #endif 37abb5dd6eSMark de Wever 38818cfb10SCasey Carter #ifdef _MSVC_STL_VERSION 39818cfb10SCasey Carter #include <xutility> 40818cfb10SCasey Carter using std::_Bit_cast; 41818cfb10SCasey Carter #else 42abb5dd6eSMark de Wever // FUNCTION TEMPLATE _Bit_cast 43abb5dd6eSMark de Wever template <class _To, class _From, 44abb5dd6eSMark de Wever std::enable_if_t<sizeof(_To) == sizeof(_From) && std::is_trivially_copyable_v<_To> && 45abb5dd6eSMark de Wever std::is_trivially_copyable_v<_From>, 46abb5dd6eSMark de Wever int> = 0> 47abb5dd6eSMark de Wever [[nodiscard]] constexpr _To _Bit_cast(const _From& _From_obj) noexcept { 48abb5dd6eSMark de Wever return __builtin_bit_cast(_To, _From_obj); 49abb5dd6eSMark de Wever } 50818cfb10SCasey Carter #endif 51abb5dd6eSMark de Wever 52abb5dd6eSMark de Wever // Includes Microsoft's test that tests the entire header. 53abb5dd6eSMark de Wever 54abb5dd6eSMark de Wever #include "test.cpp" 55