1// { dg-do assemble } 2// { dg-options "-Wreturn-type" } 3// GROUPS passed error-reporting 4 5// DR 295 allows qualification via typedef 6 7template <char C> 8class badoo 9{ 10}; 11 12template <int (*F) (int)> 13class doowop 14{ 15}; 16 17struct A 18{ 19 int a; 20 ~A () { a = 0; } 21 operator int () { return a; } 22}; 23 24extern "C" int atoi (char *); 25 26int (*fee)(char *) = atoi; 27int (**bar)(char *) = &fee; 28 29char *s = "4"; 30char **sp = &s; 31char ***spp = &sp; 32 33int foo (int a = (**bar) (s)) 34{ 35 return doowop<foo>::bar; // { dg-error "" } not a member 36} 37 38int foo2 (int (*a)(int) = &foo) 39{ 40 undef4 (1); // { dg-error "" } implicit declaration 41 return 1; 42} 43 44class X{ 45 class Y{}; // { dg-error "" } private 46}; 47 48typedef int const * bart (); 49//The following is DR295 dependant 50typedef bart const * const * bar2; 51typedef bart volatile * const * bar2v; 52 53bar2 baz (X::Y y) // { dg-error "" } in this context 54{ 55 X::Y f; // { dg-error "" } in this context 56 bar2 wa [5]; 57 wa[0] = baz(f); 58 undef2 (1); // { dg-error "" } implicit declaration 59} 60 61int ninny () 62{ 63 struct A 64 { 65 static int ninny2 () { return badoo<'\001'>::foo; } // { dg-error "" } not a member 66 }; 67 68 return A::ninny2(); 69} 70 71int darg (char X::*p) 72{ 73 undef3 (1); // { dg-error "" } implicit declaration 74} 75