// { 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[]));
}
