xml*_*lmx 1 c++ types friend c++11 type-alias
class A {
};
class B {
using C = A;
// Compilation error:
// Type alias 'C' cannot be referenced with a class specifier
friend class C;
};
Run Code Online (Sandbox Code Playgroud)
为什么 C++ 中不允许类型别名作为友元类名?
背后的原理是什么?
为什么 C++ 中不允许类型别名作为友元类名?
您假设类型别名不允许出现在友元声明中是错误的。通过别名交友的正确语法C是friend C;而不是friend class C;。
另请注意,该程序格式不正确,并且 msvc未给出诊断是错误的。这可以从dcl.type.elab看出:
如果标识符或 simple-template-id 解析为类名或枚举名,则详细类型说明符将其引入声明中,就像简单类型说明符引入其类型名一样([dcl.type 。简单的])。 如果标识符或 simple-template-id解析为 typedef-name ([dcl.typedef], [temp.names]),则详细类型说明符格式错误。
(强调我的)
并且由于标识符C确实解析为typedef-name、 episted-type-specifier( class C),因此该程序是格式错误的。
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |