1 // { dg-do compile { target c++11 } } 2 // { dg-additional-options "-Wparentheses -Wno-non-template-friend" } 3 4 // the MVP warning triggered on a friend decl. */ 5 class X; 6 enum class Q {}; // C++ 11ness 7 enum R {}; 8 9 namespace here 10 { 11 // these friends 12 X friendFunc1(); 13 X *friendFunc2 (); 14 int friendFunc3 (); 15 int bob (); 16 Q bill (); 17 R ben (); 18 } 19 20 namespace nm 21 { 22 namespace here 23 { 24 // Not these friends 25 void friendFunc1 (); 26 void friendFunc2 (); 27 void friendFunc3 (); 28 int bob (); 29 Q bill (); 30 R ben (); 31 } 32 33 class TestClass 34 { 35 friend X (::here::friendFunc1 ()); // parens are needed 36 friend X *(::here::friendFunc2 ()); // { dg-warning "" } 37 friend X *::here::friendFunc2 (); 38 friend int (::here::friendFunc3 ()); // { dg-warning "" } 39 }; 40 41 template <typename T> class X 42 { 43 friend typename T::frob (::here::bob ()); 44 friend Q (::here::bill ()); 45 friend R (::here::ben ()); 46 }; 47 } 48 49