判断一下下面这段代码能否通过编译?

#include <iostream>
#include <string>
#include <memory>

using namespace std;

struct B;
extern void F(B* b);

struct B
{
    struct A
    {
        friend void F(B* b);
    };
private:
    int data;
};

void F(B* b)
{
    cout << b->data << endl;
}

int main()
{
    B b;
    F(&b);
    return 0;
}
<label class="jsk&#45;checkbox">

不能。

</label>

因为A只是赋予了F访问A所有成员的能力。尽管AB的内部类,可以看到B的所有东西,但是A不能替B做出friend的这个决定。