Friend access to protected nested class

前端 未结 2 1338
情书的邮戳
情书的邮戳 2021-01-11 15:08

I have the following C++ code:

class A {
 protected:
  struct Nested {
    int x;
  };
};

class B: public A {
  friend class C;
};

class C {
  void m1() {
         


        
2条回答
  •  我在风中等你
    2021-01-11 15:43

    According to the Standard, GCC is correct and Clang is wrong. It says at 11.2/4

    A member m is accessible when named in class N if

    • m as a member of N is protected, and the reference occurs in a member or friend of class N, or in a member or friend of a class P derived from N, where m as a member of P is private or protected

    This is subject of this Clang bugreport, which prevents Clang from building Qt: http://llvm.org/bugs/show_bug.cgi?id=6840 . One Clang guy says

    Actually, I intentionally haven't implemented this rule yet. It is either a drafting error or a horrible mistake. It neuters the entire 'protected' specifier, it makes the well-formedness of code dependent on the existence of completely unrelated classes, it imposes high costs on the implementation, and it's formally undecidable in the presence of templates.

提交回复
热议问题