105 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// type_traits10 11// is_floating_point12 13#include <type_traits>14#include <cstddef> // for std::nullptr_t15#include "test_macros.h"16 17template <class T>18void test_is_floating_point()19{20 static_assert( std::is_floating_point<T>::value, "");21 static_assert( std::is_floating_point<const T>::value, "");22 static_assert( std::is_floating_point<volatile T>::value, "");23 static_assert( std::is_floating_point<const volatile T>::value, "");24#if TEST_STD_VER > 1425 static_assert( std::is_floating_point_v<T>, "");26 static_assert( std::is_floating_point_v<const T>, "");27 static_assert( std::is_floating_point_v<volatile T>, "");28 static_assert( std::is_floating_point_v<const volatile T>, "");29#endif30}31 32template <class T>33void test_is_not_floating_point()34{35 static_assert(!std::is_floating_point<T>::value, "");36 static_assert(!std::is_floating_point<const T>::value, "");37 static_assert(!std::is_floating_point<volatile T>::value, "");38 static_assert(!std::is_floating_point<const volatile T>::value, "");39#if TEST_STD_VER > 1440 static_assert(!std::is_floating_point_v<T>, "");41 static_assert(!std::is_floating_point_v<const T>, "");42 static_assert(!std::is_floating_point_v<volatile T>, "");43 static_assert(!std::is_floating_point_v<const volatile T>, "");44#endif45}46 47class Empty48{49};50 51class NotEmpty52{53 virtual ~NotEmpty();54};55 56union Union {};57 58struct bit_zero59{60 int : 0;61};62 63class Abstract64{65 virtual ~Abstract() = 0;66};67 68enum Enum {zero, one};69struct incomplete_type;70 71typedef void (*FunctionPtr)();72 73int main(int, char**)74{75 test_is_floating_point<float>();76 test_is_floating_point<double>();77 test_is_floating_point<long double>();78 79 test_is_not_floating_point<short>();80 test_is_not_floating_point<unsigned short>();81 test_is_not_floating_point<int>();82 test_is_not_floating_point<unsigned int>();83 test_is_not_floating_point<long>();84 test_is_not_floating_point<unsigned long>();85 86 test_is_not_floating_point<std::nullptr_t>();87 test_is_not_floating_point<void>();88 test_is_not_floating_point<int&>();89 test_is_not_floating_point<int&&>();90 test_is_not_floating_point<int*>();91 test_is_not_floating_point<const int*>();92 test_is_not_floating_point<char[3]>();93 test_is_not_floating_point<char[]>();94 test_is_not_floating_point<Union>();95 test_is_not_floating_point<Empty>();96 test_is_not_floating_point<bit_zero>();97 test_is_not_floating_point<NotEmpty>();98 test_is_not_floating_point<Abstract>();99 test_is_not_floating_point<Enum>();100 test_is_not_floating_point<FunctionPtr>();101 test_is_not_floating_point<incomplete_type>();102 103 return 0;104}105