Lig*_*ica 10 c++ typedef friend c++11
struct A {};
typedef A B;
struct C { friend struct B; };
Run Code Online (Sandbox Code Playgroud)
GCC 4.7.0 20110427告诉我error: using typedef-name 'B' after 'struct'.
到目前为止,这似乎是不言自明的; 毕竟,我的示例代码试图声明和朋友一个struct被叫B,这实际上不是一个struct-key.
但是,我必须写friend struct A;一下,如果A实际上是一个复杂的,啰嗦的模板metahackery混乱,这是不可取的.
我错过了什么,或者我们实际上不是 friend通过类型别名的类型?如果没有,是否有任何特殊原因或仅仅是语言的怪癖?
这个问题之前提出了这个问题,但是已经过时了,并且对C++ 0x的问题进行了断言,这看似不真实.这个问题代替了C++ 0x FDIS.
Joh*_*itb 11
你可以成为任意类型的朋友(对于非类类型,将忽略朋友声明),但是你应该省略struct:
struct A {};
typedef A B;
struct C {
friend B; // equivalent: friend struct A;
// equivalent: friend A;
friend int; // ignored
};
Run Code Online (Sandbox Code Playgroud)