typedef - 原始类型到原始类型

Mah*_*esh 1 c++ typedef language-lawyer gcc4 visual-studio-2012

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

typedef int long;
Run Code Online (Sandbox Code Playgroud)

在VS 2012上,发出警告但编译正常.

警告C4091:'typedef':当没有声明变量时,在'long'的左边忽略

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

错误:声明不声明任何内容.

哪个编译器符合标准?

PS:我不会在生产代码中写这样的东西.刚想出想法和检查.

Cat*_*lus 7

它是有效的C++

No. C++ 11,§7.1.3.6:

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


Rei*_*ica 5

他们都说同样的话,但有人报告说这是一个错误.请注意,VS警告说"typedef被忽略了".问题是int long并且long int是同义词,所以你基本上创建了一个未命名typedeflong.