// { dg-do assemble  }
// { dg-options "-Wreturn-type" }
// GROUPS passed error-reporting

// DR 295 allows qualification via typedef

template <char C>
class badoo
{
};

template <int (*F) (int)>
class doowop
{
};

struct A
{
  int a;
  ~A () { a = 0; }
  operator int () { return a; }
};

extern "C" int atoi (const char *);

int (*fee)(const char *) = atoi;
int (**bar)(const char *) = &fee;

const char* s = "4";
const char** sp = &s;
const char*** spp = &sp;

int foo (int a = (**bar) (s))
{
   return doowop<foo>::bar; // { dg-error "" } not a member
}

int foo2 (int (*a)(int) = &foo)
{
   undef4 (1); // { dg-error "" } implicit declaration
  return 1;
}

class X{
  class Y{};			// { dg-error "" } private
};

typedef int const * bart ();
//The following is DR295 dependant
typedef bart const * const * bar2;
typedef bart volatile * const * bar2v;

bar2 baz (X::Y y)	        // { dg-error "" } in this context
{
  X::Y f;			// { dg-error "" } in this context
  bar2 wa [5];
  wa[0] = baz(f);
  undef2 (1); // { dg-error "" } implicit declaration
}

int ninny ()
{
  struct A
    {
	  static int ninny2 () { return badoo<'\001'>::foo; } // { dg-error "" } not a member
    };

  return A::ninny2();
}

int darg (char X::*p)
{
   undef3 (1); // { dg-error "" } implicit declaration
}
