1c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//===----------------------------------------------------------------------===// 2c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// 3c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// The LLVM Compiler Infrastructure 4c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// 8c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant//===----------------------------------------------------------------------===// 9c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 10c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// type_traits 11c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 12c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant// make_unsigned 13c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 14c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant#include <type_traits> 15c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 16ec1f15d9af7c014002aa27b9bb5b8f9aa1714532Eric Fiselier#include "test_macros.h" 17ec1f15d9af7c014002aa27b9bb5b8f9aa1714532Eric Fiselier 18c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantenum Enum {zero, one_}; 19c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 20ec1f15d9af7c014002aa27b9bb5b8f9aa1714532Eric Fiselier#if TEST_STD_VER >= 11 21ec1f15d9af7c014002aa27b9bb5b8f9aa1714532Eric Fiselierenum BigEnum : unsigned long long // MSVC's ABI doesn't follow the Standard 22ec1f15d9af7c014002aa27b9bb5b8f9aa1714532Eric Fiselier#else 23c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantenum BigEnum 24ec1f15d9af7c014002aa27b9bb5b8f9aa1714532Eric Fiselier#endif 25c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{ 26aa87532fee72a30669efb5a673343b390284502dRichard Smith bigzero, 27c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant big = 0xFFFFFFFFFFFFFFFFULL 28c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant}; 29c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant 308a71d236336705a49257d43ac8d986ba3d5f5060Stephan Tolksdorf#if !defined(_LIBCPP_HAS_NO_INT128) && !defined(_LIBCPP_HAS_NO_STRONG_ENUMS) 318a71d236336705a49257d43ac8d986ba3d5f5060Stephan Tolksdorfenum HugeEnum : __int128_t 328a71d236336705a49257d43ac8d986ba3d5f5060Stephan Tolksdorf{ 338a71d236336705a49257d43ac8d986ba3d5f5060Stephan Tolksdorf hugezero 348a71d236336705a49257d43ac8d986ba3d5f5060Stephan Tolksdorf}; 358a71d236336705a49257d43ac8d986ba3d5f5060Stephan Tolksdorf#endif 368a71d236336705a49257d43ac8d986ba3d5f5060Stephan Tolksdorf 37933afa9761c1c1f916161278a99284d50a594939Marshall Clowtemplate <class T, class U> 38933afa9761c1c1f916161278a99284d50a594939Marshall Clowvoid test_make_unsigned() 39933afa9761c1c1f916161278a99284d50a594939Marshall Clow{ 40933afa9761c1c1f916161278a99284d50a594939Marshall Clow static_assert((std::is_same<typename std::make_unsigned<T>::type, U>::value), ""); 41e619862dbf0c4a46db6e3d816bcafcfef6e85977Stephan T. Lavavej#if TEST_STD_VER > 11 42933afa9761c1c1f916161278a99284d50a594939Marshall Clow static_assert((std::is_same<std::make_unsigned_t<T>, U>::value), ""); 43933afa9761c1c1f916161278a99284d50a594939Marshall Clow#endif 44933afa9761c1c1f916161278a99284d50a594939Marshall Clow} 45933afa9761c1c1f916161278a99284d50a594939Marshall Clow 46c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnantint main() 47c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant{ 48933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_make_unsigned<signed char, unsigned char> (); 49933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_make_unsigned<unsigned char, unsigned char> (); 50933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_make_unsigned<char, unsigned char> (); 51933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_make_unsigned<short, unsigned short> (); 52933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_make_unsigned<unsigned short, unsigned short> (); 53933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_make_unsigned<int, unsigned int> (); 54933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_make_unsigned<unsigned int, unsigned int> (); 55933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_make_unsigned<long, unsigned long> (); 56933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_make_unsigned<unsigned long, unsigned long> (); 57933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_make_unsigned<long long, unsigned long long> (); 58933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_make_unsigned<unsigned long long, unsigned long long> (); 59ef7a7b730c0dbfc3bf31d6246780e0cd7e07774fHoward Hinnant test_make_unsigned<wchar_t, std::conditional<sizeof(wchar_t) == 4, unsigned int, unsigned short>::type> (); 60ef7a7b730c0dbfc3bf31d6246780e0cd7e07774fHoward Hinnant test_make_unsigned<const wchar_t, std::conditional<sizeof(wchar_t) == 4, const unsigned int, const unsigned short>::type> (); 6109d8c46f3099b7a2bbb42ed65fcde8b9d5a0ed39Jonathan Roelofs test_make_unsigned<const Enum, std::conditional<sizeof(Enum) == sizeof(int), const unsigned int, const unsigned char>::type >(); 62933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_make_unsigned<BigEnum, 63933afa9761c1c1f916161278a99284d50a594939Marshall Clow std::conditional<sizeof(long) == 4, unsigned long long, unsigned long>::type> (); 648a71d236336705a49257d43ac8d986ba3d5f5060Stephan Tolksdorf#ifndef _LIBCPP_HAS_NO_INT128 658a71d236336705a49257d43ac8d986ba3d5f5060Stephan Tolksdorf test_make_unsigned<__int128_t, __uint128_t>(); 668a71d236336705a49257d43ac8d986ba3d5f5060Stephan Tolksdorf test_make_unsigned<__uint128_t, __uint128_t>(); 678a71d236336705a49257d43ac8d986ba3d5f5060Stephan Tolksdorf# ifndef _LIBCPP_HAS_NO_STRONG_ENUMS 688a71d236336705a49257d43ac8d986ba3d5f5060Stephan Tolksdorf test_make_unsigned<HugeEnum, __uint128_t>(); 698a71d236336705a49257d43ac8d986ba3d5f5060Stephan Tolksdorf# endif 708a71d236336705a49257d43ac8d986ba3d5f5060Stephan Tolksdorf#endif 71c52f43e72dfcea03037729649da84c23b3beb04aHoward Hinnant} 72