【问题标题】:Not able to befriend typedefs: any particular reason?无法与 typedef 成为朋友:有什么特别的原因吗?
【发布时间】:2011-05-13 15:03:51
【问题描述】:
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

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

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


This question 之前提出过这个问题,但已经过时,并且对有关 C++0x 的问题做出了似乎不正确的断言。 这个问题是关于 C++0x FDIS。

【问题讨论】:

标签: c++ typedef c++11 friend


【解决方案1】:

你可以和任意类型成为朋友(对于非类类型,朋友声明将被忽略),但是你应该省略struct

struct A {};
typedef A B;

struct C { 
  friend B; // equivalent: friend struct A;
            // equivalent: friend A;

  friend int; // ignored
};

【讨论】:

  • 也许 GCC 4.7.0 和 GCC 4.5.1 还不支持这个?
  • @Tomalak 是的,他们不支持这个。
  • 啊,是的,Clang 2.9(主干 126116)似乎支持它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
相关资源
最近更新 更多