diff options
Diffstat (limited to 'test/SemaCXX/type-traits.cpp')
-rw-r--r-- | test/SemaCXX/type-traits.cpp | 81 |
1 files changed, 69 insertions, 12 deletions
diff --git a/test/SemaCXX/type-traits.cpp b/test/SemaCXX/type-traits.cpp index 2265c28..69760fd 100644 --- a/test/SemaCXX/type-traits.cpp +++ b/test/SemaCXX/type-traits.cpp @@ -14,6 +14,7 @@ typedef Int IntAr[10]; typedef Int IntArNB[]; class Statics { static int priv; static NonPOD np; }; union EmptyUnion {}; +union IncompleteUnion; union Union { int i; float f; }; struct HasFunc { void f (); }; struct HasOp { void operator *(); }; @@ -150,6 +151,18 @@ struct VariadicCtor { template<typename...T> VariadicCtor(T...); }; +struct ThrowingDtor { + ~ThrowingDtor() throw(int); +}; + +struct NoExceptDtor { + ~NoExceptDtor() noexcept(true); +}; + +struct NoThrowDtor { + ~NoThrowDtor() throw(); +}; + void is_pod() { { int arr[T(__is_pod(int))]; } @@ -223,6 +236,7 @@ void is_empty() { int arr[F(__is_empty(Int))]; } { int arr[F(__is_empty(POD))]; } { int arr[F(__is_empty(EmptyUnion))]; } + { int arr[F(__is_empty(IncompleteUnion))]; } { int arr[F(__is_empty(EmptyAr))]; } { int arr[F(__is_empty(HasRef))]; } { int arr[F(__is_empty(HasVirt))]; } @@ -301,8 +315,23 @@ struct PotentiallyFinal<T*> final { }; template<> struct PotentiallyFinal<int> final { }; +struct SealedClass sealed { +}; + +template<typename T> +struct PotentiallySealed { }; + +template<typename T> +struct PotentiallySealed<T*> sealed { }; + +template<> +struct PotentiallySealed<int> sealed { }; + void is_final() { + { int arr[T(__is_final(SealedClass))]; } + { int arr[T(__is_final(PotentiallySealed<float*>))]; } + { int arr[T(__is_final(PotentiallySealed<int>))]; } { int arr[T(__is_final(FinalClass))]; } { int arr[T(__is_final(PotentiallyFinal<float*>))]; } { int arr[T(__is_final(PotentiallyFinal<int>))]; } @@ -318,25 +347,17 @@ void is_final() { int arr[F(__is_final(IntArNB))]; } { int arr[F(__is_final(HasAnonymousUnion))]; } { int arr[F(__is_final(PotentiallyFinal<float>))]; } + { int arr[F(__is_final(PotentiallySealed<float>))]; } } -struct SealedClass sealed { -}; - -template<typename T> -struct PotentiallySealed { }; - -template<typename T> -struct PotentiallySealed<T*> sealed { }; - -template<> -struct PotentiallySealed<int> sealed { }; - void is_sealed() { { int arr[T(__is_sealed(SealedClass))]; } { int arr[T(__is_sealed(PotentiallySealed<float*>))]; } { int arr[T(__is_sealed(PotentiallySealed<int>))]; } + { int arr[T(__is_sealed(FinalClass))]; } + { int arr[T(__is_sealed(PotentiallyFinal<float*>))]; } + { int arr[T(__is_sealed(PotentiallyFinal<int>))]; } { int arr[F(__is_sealed(int))]; } { int arr[F(__is_sealed(Union))]; } @@ -349,6 +370,7 @@ void is_sealed() { int arr[F(__is_sealed(IntArNB))]; } { int arr[F(__is_sealed(HasAnonymousUnion))]; } { int arr[F(__is_sealed(PotentiallyFinal<float>))]; } + { int arr[F(__is_sealed(PotentiallySealed<float>))]; } } typedef HasVirt Polymorph; @@ -361,6 +383,7 @@ void is_polymorphic() { int arr[F(__is_polymorphic(int))]; } { int arr[F(__is_polymorphic(Union))]; } + { int arr[F(__is_polymorphic(IncompleteUnion))]; } { int arr[F(__is_polymorphic(Int))]; } { int arr[F(__is_polymorphic(IntAr))]; } { int arr[F(__is_polymorphic(UnionAr))]; } @@ -1979,6 +2002,9 @@ void constructible_checks() { // PR20228 { int arr[T(__is_constructible(VariadicCtor, int, int, int, int, int, int, int, int, int))]; } + + // PR25513 + { int arr[F(__is_constructible(int(int)))]; } } // Instantiation of __is_trivially_constructible @@ -2019,3 +2045,34 @@ void array_extent() { int t02[T(__array_extent(ConstIntArAr, 0) == 4)]; int t03[T(__array_extent(ConstIntArAr, 1) == 10)]; } + +void is_destructible_test() { + { int arr[T(__is_destructible(int))]; } + { int arr[T(__is_destructible(int[2]))]; } + { int arr[F(__is_destructible(int[]))]; } + { int arr[F(__is_destructible(void))]; } + { int arr[T(__is_destructible(int &))]; } + { int arr[T(__is_destructible(HasDest))]; } + { int arr[F(__is_destructible(AllPrivate))]; } + { int arr[T(__is_destructible(SuperNonTrivialStruct))]; } + { int arr[T(__is_destructible(AllDefaulted))]; } + { int arr[F(__is_destructible(AllDeleted))]; } + { int arr[T(__is_destructible(ThrowingDtor))]; } + { int arr[T(__is_destructible(NoThrowDtor))]; } +} + +void is_nothrow_destructible_test() { + { int arr[T(__is_nothrow_destructible(int))]; } + { int arr[T(__is_nothrow_destructible(int[2]))]; } + { int arr[F(__is_nothrow_destructible(int[]))]; } + { int arr[F(__is_nothrow_destructible(void))]; } + { int arr[T(__is_nothrow_destructible(int &))]; } + { int arr[T(__is_nothrow_destructible(HasDest))]; } + { int arr[F(__is_nothrow_destructible(AllPrivate))]; } + { int arr[T(__is_nothrow_destructible(SuperNonTrivialStruct))]; } + { int arr[T(__is_nothrow_destructible(AllDefaulted))]; } + { int arr[F(__is_nothrow_destructible(AllDeleted))]; } + { int arr[F(__is_nothrow_destructible(ThrowingDtor))]; } + { int arr[T(__is_nothrow_destructible(NoExceptDtor))]; } + { int arr[T(__is_nothrow_destructible(NoThrowDtor))]; } +} |