无法与typedefs交朋友:任何特殊原因

Not able to befriend typedefs: any particular reason?

本文关键字:任何特 交朋友 typedefs      更新时间:2023-10-16
struct A {};
typedef A B;
struct C { friend struct B; };

GCC 4.7.0 20110427告诉我error: using typedef-name 'B' after 'struct'.

到目前为止,这似乎是不言自明的;毕竟,我的示例代码试图声明和好友一个名为 B 的struct,这实际上不是struct-key

但是,我必须写friend struct A;,如果A实际上是一个复杂的、冗长的模板元黑客混乱,这是不可取的。

我是否遗漏了什么,或者我们实际上不能通过类型别名friend类型?如果没有,是否有任何特殊原因,或者只是语言的怪癖?


这个问题

之前提出了这个问题,但已经过时了,并就 C++0x 的问题做出了断言,但似乎不是真的。这个问题是关于C++0x FDIS。

你可以与任意类型交朋友(对于非类类型,友元声明将被忽略),但随后应省略struct

struct A {};
typedef A B;
struct C { 
  friend B; // equivalent: friend struct A;
            // equivalent: friend A;
  friend int; // ignored
};