当前位置:  开发笔记 > 编程语言 > 正文

为什么仍然需要在using语句的RHS中使用typename消除依赖类型的歧义?

如何解决《为什么仍然需要在using语句的RHS中使用typename消除依赖类型的歧义?》经验,为你挑选了0个好方法。

我非常清楚为什么需要使用typename依赖类型,因为当它看到类似的东西时,编译器可能无法消除类型和变量声明之间的歧义T::type,请参阅此答案以获得一个很好的解释.TL; DR:在类似的表达式中T::type * x;,编译器不能"知道" T::type是某个类型,还是在某个特定的特化中声明的变量T.

但是,在类似的东西

using type = T::type;

没有任何暧昧.IMO T::type 应该始终被解析为一个类型,因为它是using语句的RHS的一部分.但是,我们仍然需要在typename这里使用(至少根据gcc和clang),

using type = typename T::type;

Live on Coliru, gcc Live on Coliru, clang

Visual C++ 似乎接受了没有a 的代码typename,但是我对编译器完全符合标准没有太多信心(实际上,它有许多非标准扩展,例如将rvalues绑定到非const引用).

:有什么理由说这不是typenameC++ 11及更高版本规则的例外吗?

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有