朋友类无法访问受保护的成员

Jos*_*osé 7 c++ visual-studio-2015

此代码曾用于Visual Studio 2015,但它不再适用于Visual Studio 2015更新1.

class Foo
{
protected:

    virtual ~Foo() {};
    friend class Foo__init;
};

class Foo__init
{
public:

    Foo _init;
};

static Foo__init _Foo_init;
Run Code Online (Sandbox Code Playgroud)

它失败并出现以下错误:

Error   C2248   'Foo::~Foo': cannot access protected member declared in class 'Foo'
Run Code Online (Sandbox Code Playgroud)

这是编译器错误还是代码生成错误?

Rom*_*sev 3

这里

友元声明出现在类主体中,并授予函数或另一个类访问友元声明出现的类的私有和受保护成员的权限。

所以这是一个编译器错误。两者g++ (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010Ubuntu clang version 3.6.2-1 (tags/RELEASE_362/final) (based on LLVM 3.6.2)编译此代码(我添加int main() {})。