typedef - 原始类型到原始类型

时间:2012-11-30 16:24:00

标签: c++ visual-studio-2012 typedef language-lawyer gcc4

将原始类型的typedef改为另一种原始类型是有效的C ++吗?

typedef int long;

在VS 2012上,发出了警告但编译得很好。

  

警告C4091:'typedef':未声明变量时在'long'左侧被忽略

但是在gcc-4.3.4上,它失败了。

  

错误:声明不会声明任何内容。

哪种编译器符合标准?

PS:我不会在生产代码中写这样的东西。刚想出来并想一想。

3 个答案:

答案 0 :(得分:7)

  

它是否有效C ++

没有。 C ++ 11,§7.1.3.6:

  

在给定范围内,不得使用typedef规范来重新定义在该范围内声明的任何类型的名称,以引用不同类型。

答案 1 :(得分:5)

他们都说同样的话,但有人报告说这是一个错误。请注意,VS警告说“typedef被忽略了”。问题是int longlong int是同义词,因此您基本上是在typedef创建一个未命名的long

答案 2 :(得分:2)

两者都符合标准要求。该typedef无效,两个编译器都会发出诊断信息。