VC 和Clang中的C 打字机
c++ typename in vc++ and clang
以下代码:
template<typename T>
struct A{
using TT = typename T;
};
vc 还可以。clang输出:错误:期待一个合格的名称使用tt = typeName t;'typeName';。
如果您更改
using TT = typename T;
to
using TT = T;
,vc 和clang还可以。
为什么?
您的代码不正确C 。C 语法指定关键字typename
(除其他用于声明模板参数的用途外(只能在A gem>合格的ID 的开头使用,该名称至少包含一个::
Token。
显然MSVC允许此处更宽敞的语法。
(typename
必须在模板中的大多数上下文中使用,只要 gem> gem> gem> griped-iD 是一个应该是类型的依赖性名称,而不是变量或一个变量模板。在这里大致表示编译器无法确定为其找到声明,这是由于取决于模板参数。但是,在合格 - ID上使用关键字也有效>这不是依赖的,或者根本不依赖。(
编译器已经知道T
是类型名称,因为您在类模板中声明了它,因此您应该using TT = T
而不是using TT = typename T
。VC 并不遵循所有ISO标准,因此某些未能在GCC或Clang中编译的代码可以在VC
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- C++中的"inline"关键字
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 用C++中的一个变量定义一个常量
- vector.resize()中的分配错误
- 使用指针从C++中的数组中获取最大值
- arr[-1]在c++中的奇怪行为
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- VC 和Clang中的C 打字机
- 为什么在枚举名称中的字符数量之前先枚举打字机