Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/ext/is_aggregate.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
// { dg-do run { target c++11 } } #include <cassert> template<typename T> bool f() { return __is_aggregate(T); } template<typename T> class My { public: bool f() { return !!__is_aggregate(T); } }; template<typename T> class My2 { public: static const bool trait = __is_aggregate(T); }; template<typename T> const bool My2<T>::trait; template<typename T, bool b = __is_aggregate(T)> struct My3_help { static const bool trait = b; }; template<typename T, bool b> const bool My3_help<T, b>::trait; template<typename T> class My3 { public: bool f() { return My3_help<T>::trait; } }; #define PTEST(T) (__is_aggregate(T) && f<T>() \ && My<T>().f() && My2<T>::trait && My3<T>().f()) #define NTEST(T) (!__is_aggregate(T) && !f<T>() \ && !My<T>().f() && !My2<T>::trait && !My3<T>().f()) struct A { int a, b, c; }; class B { static int a; private: static int b; public: int c; }; struct C { C () {} int a, b, c; }; struct D { explicit D (int) {} int a, b, c; }; struct E : public A { int d, e, f; }; struct F : public C { using C::C; int d, e, f; }; class G { int a, b; }; struct H { private: int a, b; }; struct I { protected: int a, b; }; struct J { int a, b; void foo (); }; struct K { int a, b; virtual void foo (); }; struct L : virtual public A { int d, e; }; struct M : protected A { int d, e; }; struct N : private A { int d, e; }; struct O { O () = delete; int a, b, c; }; struct P { P () = default; int a, b, c; }; typedef int T; typedef float U; typedef int V __attribute__((vector_size (4 * sizeof (int)))); typedef double W __attribute__((vector_size (8 * sizeof (double)))); int main () { assert (NTEST (void)); assert (NTEST (int)); assert (NTEST (double)); assert (NTEST (T)); assert (NTEST (U)); assert (PTEST (V)); assert (PTEST (W)); assert (PTEST (A)); assert (PTEST (B)); assert (NTEST (C)); assert (NTEST (D)); #if __cplusplus >= 201703L assert (PTEST (E)); #else assert (NTEST (E)); #endif assert (NTEST (F)); assert (NTEST (G)); assert (NTEST (H)); assert (NTEST (I)); assert (PTEST (J)); assert (NTEST (K)); assert (NTEST (L)); assert (NTEST (M)); assert (NTEST (N)); #if __cplusplus > 201703L assert (NTEST (O)); assert (NTEST (P)); #else assert (PTEST (O)); assert (PTEST (P)); #endif assert (PTEST (int[])); assert (PTEST (double[])); assert (PTEST (T[2])); assert (PTEST (U[])); assert (PTEST (V[])); assert (PTEST (W[])); assert (PTEST (A[19])); assert (PTEST (B[])); assert (PTEST (C[])); assert (PTEST (D[])); assert (PTEST (E[])); assert (PTEST (F[])); assert (PTEST (G[])); assert (PTEST (H[])); assert (PTEST (I[])); assert (PTEST (J[24])); assert (PTEST (K[])); assert (PTEST (L[])); assert (PTEST (M[6])); assert (PTEST (N[])); assert (PTEST (O[])); assert (PTEST (P[])); }