brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 96d160b Raw
111 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_integral12 13#include <type_traits>14#include <cstddef>        // for std::nullptr_t15#include "test_macros.h"16 17template <class T>18void test_is_integral()19{20    static_assert( std::is_integral<T>::value, "");21    static_assert( std::is_integral<const T>::value, "");22    static_assert( std::is_integral<volatile T>::value, "");23    static_assert( std::is_integral<const volatile T>::value, "");24#if TEST_STD_VER > 1425    static_assert( std::is_integral_v<T>, "");26    static_assert( std::is_integral_v<const T>, "");27    static_assert( std::is_integral_v<volatile T>, "");28    static_assert( std::is_integral_v<const volatile T>, "");29#endif30}31 32template <class T>33void test_is_not_integral()34{35    static_assert(!std::is_integral<T>::value, "");36    static_assert(!std::is_integral<const T>::value, "");37    static_assert(!std::is_integral<volatile T>::value, "");38    static_assert(!std::is_integral<const volatile T>::value, "");39#if TEST_STD_VER > 1440    static_assert(!std::is_integral_v<T>, "");41    static_assert(!std::is_integral_v<const T>, "");42    static_assert(!std::is_integral_v<volatile T>, "");43    static_assert(!std::is_integral_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 73 74int main(int, char**)75{76    test_is_integral<short>();77    test_is_integral<unsigned short>();78    test_is_integral<int>();79    test_is_integral<unsigned int>();80    test_is_integral<long>();81    test_is_integral<unsigned long>();82    test_is_integral<bool>();83    test_is_integral<char>();84    test_is_integral<signed char>();85    test_is_integral<unsigned char>();86    test_is_integral<wchar_t>();87#ifndef TEST_HAS_NO_CHAR8_T88    test_is_integral<char8_t>();89#endif90 91    test_is_not_integral<std::nullptr_t>();92    test_is_not_integral<void>();93    test_is_not_integral<int&>();94    test_is_not_integral<int&&>();95    test_is_not_integral<int*>();96    test_is_not_integral<double>();97    test_is_not_integral<const int*>();98    test_is_not_integral<char[3]>();99    test_is_not_integral<char[]>();100    test_is_not_integral<Union>();101    test_is_not_integral<Enum>();102    test_is_not_integral<FunctionPtr>();103    test_is_not_integral<Empty>();104    test_is_not_integral<bit_zero>();105    test_is_not_integral<NotEmpty>();106    test_is_not_integral<Abstract>();107    test_is_not_integral<incomplete_type>();108 109  return 0;110}111