54 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9// test numeric_limits10 11// Specializations shall be provided for each arithmetic type, both floating12// point and integer, including bool. The member is_specialized shall be13// true for all such specializations of numeric_limits.14 15// Non-arithmetic standard types, such as complex<T> (26.3.2), shall not16// have specializations.17 18// From [numeric.limits]:19 20// The value of each member of a specialization of numeric_limits on a cv21// -qualified type cv T shall be equal to the value of the corresponding22// 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#include "type_algorithms.h"30 31struct Test {32 template <class T>33 void operator()() {34 static_assert(std::numeric_limits<T>::is_specialized,35 "std::numeric_limits<T>::is_specialized");36 static_assert(std::numeric_limits<const T>::is_specialized,37 "std::numeric_limits<const T>::is_specialized");38 static_assert(std::numeric_limits<volatile T>::is_specialized,39 "std::numeric_limits<volatile T>::is_specialized");40 static_assert(std::numeric_limits<const volatile T>::is_specialized,41 "std::numeric_limits<const volatile T>::is_specialized");42 }43};44 45int main(int, char**)46{47 types::for_each(types::arithmetic_types(), Test());48 49 static_assert(!std::numeric_limits<std::complex<double> >::is_specialized,50 "!std::numeric_limits<std::complex<double> >::is_specialized");51 52 return 0;53}54