//  Copyright (C) 2008 N. Musatti
//  Use, modification and distribution are subject to the
//  Boost Software License, Version 1.0. (See accompanying file
//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

//  See http://www.boost.org/libs/config for most recent version.

//  MACRO:         BOOST_NO_NESTED_FRIENDSHIP
//  TITLE:         Access to private members from nested classes
//  DESCRIPTION:   If the compiler fails to support access to private members
//                 from nested classes

namespace boost_no_nested_friendship {

class A {
public:
   A() {}
   struct B {
      int f(A& a) 
      {
         a.f1();
         a.f2(a); 
         return a.b; 
      }
   };

private:
   static int b;
   static void f1(){}
   template <class T>
   static void f2(const T&){}
};

int A::b = 0;

int test()
{
    A a;
    A::B b;
    return b.f(a);
}

}

