1//===----------------------------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is dual licensed under the MIT and the University of Illinois Open 6// Source Licenses. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// test numeric_limits 11 12// Specializations shall be provided for each arithmetic type, both floating 13// point and integer, including bool. The member is_specialized shall be 14// true for all such specializations of numeric_limits. 15 16// Non-arithmetic standard types, such as complex<T> (26.3.2), shall not 17// have specializations. 18 19// From [numeric.limits]: 20 21// The value of each member of a specialization of numeric_limits on a cv 22// -qualified type cv T shall be equal to the value of the corresponding 23// member of the specialization on the unqualified type T. 24 25// More convenient to test it here. 26 27#include <limits> 28#include <complex> 29 30template <class T> 31void test() 32{ 33 static_assert(std::numeric_limits<T>::is_specialized, 34 "std::numeric_limits<T>::is_specialized"); 35 static_assert(std::numeric_limits<const T>::is_specialized, 36 "std::numeric_limits<const T>::is_specialized"); 37 static_assert(std::numeric_limits<volatile T>::is_specialized, 38 "std::numeric_limits<volatile T>::is_specialized"); 39 static_assert(std::numeric_limits<const volatile T>::is_specialized, 40 "std::numeric_limits<const volatile T>::is_specialized"); 41} 42 43int main() 44{ 45 test<bool>(); 46 test<char>(); 47 test<wchar_t>(); 48#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS 49 test<char16_t>(); 50 test<char32_t>(); 51#endif // _LIBCPP_HAS_NO_UNICODE_CHARS 52 test<signed char>(); 53 test<unsigned char>(); 54 test<signed short>(); 55 test<unsigned short>(); 56 test<signed int>(); 57 test<unsigned int>(); 58 test<signed long>(); 59 test<unsigned long>(); 60 test<signed long long>(); 61 test<unsigned long long>(); 62#ifndef _LIBCPP_HAS_NO_INT128 63 test<__int128_t>(); 64 test<__uint128_t>(); 65#endif 66 test<float>(); 67 test<double>(); 68 test<long double>(); 69 static_assert(!std::numeric_limits<std::complex<double> >::is_specialized, 70 "!std::numeric_limits<std::complex<double> >::is_specialized"); 71} 72