brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 4303901 Raw
75 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// void_t12 13// UNSUPPORTED: c++03, c++11, c++1414 15#include <type_traits>16 17#include "test_macros.h"18 19template <class T>20void test1()21{22    ASSERT_SAME_TYPE(void, std::void_t<T>);23    ASSERT_SAME_TYPE(void, std::void_t<const T>);24    ASSERT_SAME_TYPE(void, std::void_t<volatile T>);25    ASSERT_SAME_TYPE(void, std::void_t<const volatile T>);26}27 28template <class T, class U>29void test2()30{31    ASSERT_SAME_TYPE(void, std::void_t<T, U>);32    ASSERT_SAME_TYPE(void, std::void_t<const T, U>);33    ASSERT_SAME_TYPE(void, std::void_t<volatile T, U>);34    ASSERT_SAME_TYPE(void, std::void_t<const volatile T, U>);35 36    ASSERT_SAME_TYPE(void, std::void_t<U, T>);37    ASSERT_SAME_TYPE(void, std::void_t<U, const T>);38    ASSERT_SAME_TYPE(void, std::void_t<U, volatile T>);39    ASSERT_SAME_TYPE(void, std::void_t<U, const volatile T>);40 41    ASSERT_SAME_TYPE(void, std::void_t<T, const U>);42    ASSERT_SAME_TYPE(void, std::void_t<const T, const U>);43    ASSERT_SAME_TYPE(void, std::void_t<volatile T, const U>);44    ASSERT_SAME_TYPE(void, std::void_t<const volatile T, const U>);45}46 47class Class48{49public:50    ~Class();51};52 53int main(int, char**)54{55    ASSERT_SAME_TYPE(void, std::void_t<>);56 57    test1<void>();58    test1<int>();59    test1<double>();60    test1<int&>();61    test1<Class>();62    test1<Class[]>();63    test1<Class[5]>();64 65    test2<void, int>();66    test2<double, int>();67    test2<int&, int>();68    test2<Class&, bool>();69    test2<void *, int&>();70 71    ASSERT_SAME_TYPE(void, std::void_t<int, double const &, Class, volatile int[], void>);72 73  return 0;74}75