+++ /dev/null
-// Build don't link:
-
-// Make sure we make the right unqualified class a friend
-// See PR c++/4403
-
-template <class T> struct A
-{
- struct AA;
- struct AC;
-};
-
-template <class T> class B
- :public A<T>
-{
- friend struct B::AA; // OK, this has an implicit typename
- // as if it is 'friend struct typename B::AA'
- // (I think there's a defect report
- // about that)
- friend struct AC; // this makes ::AC a friend *not* A<T>::AC
-
- private: // only our friends can get out values
- static T valueA_AA;
- static T valueA_AC;
- static T value_AC;
-};
-template <typename T> T B<T>::valueA_AA;
-template <typename T> T B<T>::valueA_AC;// ERROR - private - XFAIL *-*-*
-template <typename T> T B<T>::value_AC; // gets bogus error - XFAIL *-*-*
-
-// this one is a friend
-template <class T> struct A<T>::AA
-{
- int M ()
- {
- return B<T>::valueA_AA;
- }
-};
-
-// this is not a friend
-template <class T> struct A<T>::AC
-{
- T M ()
- {
- return B<T>::valueA_AC; // ERROR - within this context - XFAIL *-*-*
- }
-};
-
-// this is a friend
-struct AC
-{
- int M ()
- {
- return B<int>::value_AC; // gets bogus error - XFAIL *-*-*
- }
-};
-
-B<int> b;
-A<int>::AA a_aa;
-A<int>::AC a_ac;
-AC ac;
-
-int main ()
-{
- a_aa.M ();
- a_ac.M ();
- ac.M ();
-}