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