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