为类成员使用声明仅允许作为成员声明的原因是什么?我不能做使用内部类型的声明
struct Outer
{
typedef int Inner;
};
void f()
{
// this doesn't work with C++14
using Outer::Inner;
}
,但我认为这将是使用-陈述句引进宣布其他地方到当前区域名称的预期语义相当正交的。它是明确的C++标准
7.3.3/8的限制:using声明的类成员须为 成员声明
,但我不知道为什么。
我认为这使语言更加规则,如果它是允许内部类型(类型定义,类等),并定义为相同
// using Outer::Inner should be identical to
using Inner = Outer::Inner
,这是相同的名称空间的行为。
我知道这个问题has been asked before,但接受的答案是被禁止的,因为标准是这样说的。我想知道它背后是否有任何技术原因。在一个评论,它说,
制定标准(因此所有的编译器)更复杂的 处理,有一个方便的解决方法的不寻常的案件只是不 通过成本效益的测试。
我会说这是一个意见,而不是一个论点。改变它使语言变得更加统一是一个巨大的好处。现在,你必须教同样的事情做不同的事情。如果删除该子句,则标准将变得更简单,这既是因为尺寸缩小了,也是因为删除了(接缝任意)特殊情况。
更确切地说,我在寻找技术原因为什么这是不允许的,例如,这会造成模棱两可或其他问题。
这也是被接受的答案。 Quote:'使标准(并因此所有的编译器)更复杂,以处理一个有一个方便的解决方法不寻常的情况下,只是没有通过成本效益测试。' – user2079303
@ user2079303我已经扩展了答案与我的论点为什么这情况并非如此。 – Jens
我没有看到你正在寻找的东西,但这个问题还没有被涵盖。我正在关闭作为一个笨蛋。如果你真的想得到更多的细节,请给它一个奖励,但你不会得到任何。 –