brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · 804c684 Raw
116 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_scalar12 13#include <type_traits>14#include <cstddef>         // for std::nullptr_t15#include "test_macros.h"16 17template <class T>18void test_is_scalar()19{20    static_assert( std::is_scalar<T>::value, "");21    static_assert( std::is_scalar<const T>::value, "");22    static_assert( std::is_scalar<volatile T>::value, "");23    static_assert( std::is_scalar<const volatile T>::value, "");24#if TEST_STD_VER > 1425    static_assert( std::is_scalar_v<T>, "");26    static_assert( std::is_scalar_v<const T>, "");27    static_assert( std::is_scalar_v<volatile T>, "");28    static_assert( std::is_scalar_v<const volatile T>, "");29#endif30}31 32template <class T>33void test_is_not_scalar()34{35    static_assert(!std::is_scalar<T>::value, "");36    static_assert(!std::is_scalar<const T>::value, "");37    static_assert(!std::is_scalar<volatile T>::value, "");38    static_assert(!std::is_scalar<const volatile T>::value, "");39#if TEST_STD_VER > 1440    static_assert(!std::is_scalar_v<T>, "");41    static_assert(!std::is_scalar_v<const T>, "");42    static_assert(!std::is_scalar_v<volatile T>, "");43    static_assert(!std::is_scalar_v<const volatile T>, "");44#endif45}46 47class incomplete_type;48 49class Empty50{51};52 53class NotEmpty54{55    virtual ~NotEmpty();56};57 58union Union {};59 60struct bit_zero61{62    int :  0;63};64 65class Abstract66{67    virtual ~Abstract() = 0;68};69 70enum Enum {zero, one};71 72typedef void (*FunctionPtr)();73 74 75int main(int, char**)76{77//  Arithmetic types (3.9.1), enumeration types, pointer types, pointer to member types (3.9.2),78//    std::nullptr_t, and cv-qualified versions of these types (3.9.3)79//    are collectively called scalar types.80 81    test_is_scalar<std::nullptr_t>();82    test_is_scalar<short>();83    test_is_scalar<unsigned short>();84    test_is_scalar<int>();85    test_is_scalar<unsigned int>();86    test_is_scalar<long>();87    test_is_scalar<unsigned long>();88    test_is_scalar<bool>();89    test_is_scalar<char>();90    test_is_scalar<signed char>();91    test_is_scalar<unsigned char>();92    test_is_scalar<wchar_t>();93    test_is_scalar<double>();94    test_is_scalar<int*>();95    test_is_scalar<const int*>();96    test_is_scalar<int Empty::*>();97    test_is_scalar<void (Empty::*)(int)>();98    test_is_scalar<Enum>();99    test_is_scalar<FunctionPtr>();100 101    test_is_not_scalar<void>();102    test_is_not_scalar<int&>();103    test_is_not_scalar<int&&>();104    test_is_not_scalar<char[3]>();105    test_is_not_scalar<char[]>();106    test_is_not_scalar<Union>();107    test_is_not_scalar<Empty>();108    test_is_not_scalar<incomplete_type>();109    test_is_not_scalar<bit_zero>();110    test_is_not_scalar<NotEmpty>();111    test_is_not_scalar<Abstract>();112    test_is_not_scalar<int(int)>();113 114  return 0;115}116