本文介绍了是否允许将类模板类型参数定义为同名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这似乎可以在 MSVC 中编译甚至按预期工作.但它是合法的 C++ 代码吗?它是否能保证执行此处预期的操作(即,将模板类型导出到同名下的结构体用户)?

template 结构体枚举{//CS中有两个难题:缓存失效和命名事物.typedef EnumType EnumType;};
解决方案

我认为类型定义是不允许的.

14.6.1 本地声明的名称 (N4296)

6 模板参数不应在其范围内重新声明(包括嵌套作用域).模板参数不得与模板名称.[示例:

模板Y类{国际T;//错误:模板参数重新声明无效 f() {图表;//错误:模板参数重新声明}};模板X级;//错误:模板参数重新声明

——结束示例 ]

typedef EnumType EnumType 是将模板参数重新定义为 typedef-name.

This seems to compile and even work as expected in MSVC. But is it legal C++ code and is it guaranteed to do what is expected here (that is, export the template type to the struct's users under the same name)?

template <typename EnumType>
struct Enum
{
   // There are two hard problems in CS: cache invalidation and naming things.
   typedef EnumType EnumType;
};
解决方案

I think the type definition is not allowed.

14.6.1 Locally declared names (N4296)

The typedef EnumType EnumType is a redefinition of the template-parameter as typedef-name.

这篇关于是否允许将类模板类型参数定义为同名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-31 21:12